【问题标题】:Using a `<textarea>` to protect against scripts使用 `<textarea>` 来防止脚本
【发布时间】:2009-07-14 00:37:19
【问题描述】:

嗯。与其“去除”输入或使用某种正则表达式来删除标签,不如将用户内容转储到 &lt;textarea&gt; 中有多安全?

例如,假设有一个 PHP 页面执行以下操作:

echo '<textarea>';
echo $_GET['whuh_you_say'] ;
echo '</textarea>';

通常这很容易受到 xss 攻击,但在 textarea 中,所有脚本标签只会显示为 &lt;script&gt; 并且不会被执行。

这不安全吗?

【问题讨论】:

    标签: php security textarea xss


    【解决方案1】:
    </textarea>
      <script type="text/javascript">
        alert("this safe...");
        /* load malicious c0dez! */
      </script>
    <textarea>
    

    【讨论】:

    • 如果您总是要使用 textarea...您可以开发一个简单的正则表达式模式来仅从字符串中删除 textarea 等以防止上述攻击...并让 textarea 自己处理其余的
    • +1 打败了我 - @davidsleeps - 虽然这可能是真的,但处理此问题的 最佳 方法是仅将您需要的标签列入白名单,并确保您正在清理用户输入生成的任何输出
    • 不一定很简单。如果我输入&lt;/text&lt;/textarea&gt;area&gt; 会怎样。这仍然需要考虑。
    • 无论如何你都应该使用 htmlspecialshars(),即使你把它放在
    • @Svish — 不。 &lt;textarea&gt; 元素不包含 CDATA。
    【解决方案2】:

    如果您的用户不应该使用任何 HTML 标签(如果您提出这个 textarea 解决方案,就是这种情况),只需通过 htmlspecialchars()htmlentities() 运行它并完成它。安全有保障。

    【讨论】:

      【解决方案3】:

      strip_tags(string);

      太棒了!诚实!

      【讨论】:

      【解决方案4】:

      这谈到了在谷歌文档中的 textarea 中发现的 XSS 漏洞(我认为该帖子有点旧 - 所以谷歌现在可能已经保护了它),但它演示了 textarea 如何被用作攻击媒介。

      ha.ckers.org discussing google docs textarea exploit

      【讨论】:

        【解决方案5】:

        基础知识已经足够了:

        sanitized = str_replace("<", "&lt;", $_GET['whuh_you_say']);
        sanitized = str_replace(">", "&gt;", sanitized);
        

        【讨论】:

        • 或者你可以只使用 htmlentities()。
        猜你喜欢
        • 1970-01-01
        • 2021-10-17
        • 1970-01-01
        • 1970-01-01
        • 2018-01-26
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 2014-01-27
        相关资源
        最近更新 更多