为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕容森 2023-07-01 16:39:32
考虑以下通过 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="..."


查看完整回答
反对 回复 2023-07-01
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信