考虑以下通过 PHP 呈现的代码:<script type="application/javascript"> const str = '<?= $str ?>';</script>如何准备$str以便安全地渲染它?PS Safely被定义为“JavaScript 获得与PHP 中$str相同的 Unicode 内容”。
1 回答
SMILET
TA贡献1796条经验 获得超4个赞
你可以使用PHP 的json_encode
:
<script type="application/javascript">
const str = <?=json_encode($str)?>;
</script>
这将返回字符串的 JSON 表示形式,这意味着:
它将用双引号引起来
转义可能位于字符串本身中的双引号
转义 Unicode 字符
仅凭这段代码(const str = ...
),XSS 风险绝对为零。String本身是安全的,可以被JS操作。
然而,如果您像这样使用该字符串,它可能会成为 XSS 危险:
eval(str);
出于明显的原因elem.innerHTML = str;
例如如果str === '<button onclick="sendCookiesToEvilServer()">Click me</button>'
, 或'<style>body { display: none; }</style>'
...该列表并不详尽
如果您想向用户显示该字符串,请选择.innerText
,.innerHTML
或者查看strip_tags
。
如果由于字符串允许包含一些 HTML 而确实需要使用innerHTML
,则需要对其进行正确的 XSS 清理。这有点困难,因为这样,您需要一个解析器来仅允许/删除一些 HTML 标签和/或属性。strip_tags
将允许您在一定程度上这样做(即您只能允许<b>
例如,但这不会阻止它<b>
具有属性onclick="..."
)。
- 1 回答
- 0 关注
- 80 浏览
添加回答
举报
0/150
提交
取消