XSS:使用 PHP 的 json_encode 创建一个 JavaScript 对象
这对 XSS 是百分之百安全吗?如果不是,您能否提供一个示例不良字符串文本,向我展示为什么它不是安全的。
<html>
<body>
<script>
<?php
$bad = "some bad string. please give example text that makes the below unsafe";
echo "var a = ".json_encode($bad).";";
echo "var b = ".json_encode(array($bad)).";";
?>
</script>
</body>
</html>
Thanks.
答案#1
简而言之,这是安全的。可能的 XSS 需要从 JavaScript 字符串(")或脚本(</script>)中进行转义。这两个字符串都已正确转义:
" becomes \"
</script> becomes <\/script>
这是关于直接注入的部分。你的应用程序应考虑到某些数组元素可能缺失。另一种可能性是数组元素不是你期望的类型(例如,数组而不是字符串)
答案#2
绝对不!!!
不要使用 json_encode 来转义 JavaScript。
例如:
json_encode<img src=# onerror=alert(1)>,这不会转义任何东西并输出到浏览器。这是一个 XSS。
请改用 htmlspecialchars。
