猿问

如何使用 PHP 安全地为 JavaScript 准备字符串?

考虑以下通过 PHP 呈现的代码:


<script type="application/javascript">

    const str = '<?= $str ?>';

</script>

如何准备$str以便安全地渲染它?


PS Safely被定义为“JavaScript 获得与PHP 中$str相同的 Unicode 内容”。


慕容森
浏览 138回答 1
1回答

SMILET

你可以使用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="...")。
随时随地看视频慕课网APP
我要回答