【问题标题】:How to prevent XSS in search forms?如何防止搜索表单中的 XSS?
【发布时间】:2014-08-01 17:46:17
【问题描述】:

我正在尝试在我的搜索表单中防止 XSS。 我添加了这个来转义 HTML 字符,但这不起作用。有什么想法吗?

 $input = htmlspecialchars($input, ENT_QUOTES); 

这是我的搜索表单

<form action="search.php" method="get">
    <input type="text" name="q" value="search" />
    <input type="submit" value="send" />
</form>

【问题讨论】:

  • 定义“不起作用”。预期的行为是什么?你会得到什么?

标签: php forms search xss


【解决方案1】:

当您想将用户输入的内容输出到浏览器时,您需要使用函数htmlspecialchars()。最重要的是清理用户输入的内容。

你也可以使用filter_var()

Source

【讨论】:

  • htmlspecialchars() 也不安全。如果页面输出未设置为 UTF-7 或 UTF-8
  • 那么,如果必须对表单操作 url 进行编码,我可以使用 OWSAP 的 RULE #5 吗?请检查我发布的问题XSS For Form URL
【解决方案2】:

根据OWASP

...如果您将不受信任的数据放入标签中的任何位置,或者像 onmouseover 这样的事件处理程序属性,或者在 CSS 中,或者在 URL 中,则 HTML 实体编码不起作用。因此,即使您在任何地方都使用 HTML 实体编码方法,您仍然很可能容易受到 XSS 的攻击。您必须对要放入不受信任数据的 HTML 文档部分使用转义语法。

据此answer

为了避免问题,你应该做什么很简单:每当你在外来代码中嵌入一个字符串时,你必须根据该语言的规则对其进行转义。

阅读 OWASP 的seven rules

  • 规则 #0 - 除非在允许的位置,否则切勿插入不受信任的数据
  • 规则 #1 - 在将不受信任的数据插入 HTML 元素内容之前进行 HTML 转义
  • 规则 #2 - 在将不受信任的数据插入 HTML 通用属性之前进行属性转义
  • 规则 #3 - 在将不受信任的数据插入 JavaScript 数据值之前 JavaScript 转义
  • 规则 #4 - 在将不受信任的数据插入 HTML 样式属性值之前,CSS 转义和严格验证
  • 规则 #5 - 在将不受信任的数据插入 HTML URL 参数值之前进行 URL 转义
  • 规则 #6 - 使用专为作业设计的库清理 HTML 标记
  • 规则 #7 - 防止基于 DOM 的 XSS

XSS 预防并非易事。 Open Web Application Security Project (OWASP) 网站上的资源是一个很好的起点。

【讨论】:

    【解决方案3】:

    XSS 通常是指某人能够将 HTML 插入到您的页面中,这可能发生在您输出用户输入但未先对其进行编码的情况下。为防止这种情况发生,请在输出用户输入时使用 htmlspecialchars() 。我有时会这样定义两个函数:

    function he($s) {
        return htmlspecialchars($s, ENT_QUOTES, "UTF-8");
    }
    function eh($s) {
        echo he($s);
    }
    

    然后,当您想要回显用户输入时,请执行以下操作:

    eh($user_input);
    

    而不是这个:

    echo $user_input;
    

    【讨论】:

    • UTF-8 专用。以上代码在 UTF-7 下易受攻击。
    【解决方案4】:

    echo htmlentities($string, ENT_QUOTES | ENT_HTML5, 'UTF-8');是一种安全有效的方法来阻止对 UTF-8 编码网页的所有 XSS 攻击,但不允许任何 HTML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      相关资源
      最近更新 更多