gpt4 book ai didi

javascript - 如何避免 "Cross-Site Script Attacks"

转载 作者:可可西里 更新时间:2023-11-01 02:53:23 25 4
gpt4 key购买 nike

如何避免跨站点脚本攻击?

Cross-site script attacks (或跨站点脚本)是指,例如,如果您的主页上有留言簿,并且客户发布了一些 javascript 代码,这些代码会将您重定向到另一个网站或发送您的 cookie在发给恶意用户的电子邮件中,或者它可能是许多其他可能被证明对您和访问您页面的人真正有害的东西。

我相信它可以做到 fx。在 PHP通过验证表单,但我没有足够的经验进行外汇交易。禁止 javascript 或其他可能伤害您的东西。

我希望你能理解我的问题并能帮助我。

最佳答案

I'm sure it can be done fx. in PHP by validating forms

不是真的。输入阶段完全不是解决 XSS 问题的地方。

如果用户键入,说 <script>alert(document.cookie)</script>输入,这本身没有错。我只是在这条消息中这样做了,如果 StackOverflow 不允许这样做,我们将很难在网站上讨论 JavaScript!在大多数情况下,您希望允许任何输入 (*),以便用户可以使用 <字面意思是小于号。

问题是,当您将一些文本写入 HTML 页面时,您必须针对其进入的上下文正确地转义它。对于 PHP,这意味着使用 htmlspecialchars()输出阶段:

<p> Hello, <?php echo htmlspecialchars($name); ?>! </p>

[PHP 提示:您可以自己定义一个名称更短的函数来执行 echo htmlspecialchars ,因为每次要将变量放入某些 HTML 时,都需要进行大量输入。]

无论文本来自何处,无论是否来自用户提交的表单,这都是必要的。虽然用户提交的数据是忘记 HTML 编码的最危险的地方,但关键是您正在获取一种格式(纯文本)的字符串并将其插入另一种格式(HTML)的上下文中。任何时候将文本放入不同的上下文中,都需要适合该上下文的编码/转义方案。

例如,如果将文本插入 JavaScript 字符串文字,则必须转义引号字符、反斜杠和换行符。如果将文本插入 URL 中的查询组件,则需要将大多数非字母数字转换为 %xx序列。每个上下文都有自己的规则;您必须知道在您选择的语言/框架中,对于每个上下文,哪个是正确的功能。您不能通过在输入阶段修改表单提交来解决这些问题 — 尽管许多天真的 PHP 程序员都尝试这样做,这就是为什么这么多应用程序在极端情况下弄乱您的输入并且仍然不安全。

(*:好吧,几乎所有。从提交的文本中过滤掉 ASCII 控制字符是有道理的。允许它们产生任何好处的可能性很小。 此外,当然您还会有您想要执行的特定于应用程序的验证,例如确保电子邮件字段看起来像电子邮件地址或数字确实是数字。但这并不是可以一揽子应用到所有输入来让您摆脱困境的东西。)

关于javascript - 如何避免 "Cross-Site Script Attacks",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3439663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com