【问题标题】:How to prevent tags and scripts from executing in HTML? [duplicate]如何防止标签和脚本在 HTML 中执行? [复制]
【发布时间】:2014-06-23 22:04:18
【问题描述】:

我正在使用来自 Mysqli 的准备好的语句。这会将输入作为文本并将其作为文本提交,从而防止 SQL 注入。

当我从数据库中读取文本时出现问题。我阅读的文本在浏览器中执行!

例如 - 如果我写为输入:

<b>Hello</b> how r u?<br>
<script> alert('He is fine dnt wry!') </script>

这会按原样进入数据库。但是当我使用我的SELECT 查询从数据库中读取它并显示它时,我的&lt;b&gt; 标签和&lt;script&gt; 标签被执行!

如何防止这种情况发生?

【问题讨论】:

  • htmlentities()htmlspecialchars() 也许?
  • 如果您希望接受 HTML,请使用 HTML Purifier 对其进行清理,或者考虑接受其他语言。 Markdown 很流行,PHP 中有几个可用的解析器。
  • 取决于你想要什么。 php.net 非常棒。

标签: javascript php jquery mysql mysqli


【解决方案1】:
echo htmlentities("<b>Hello</b> how r u?<br>
<script> alert('He is fine dnt wry!') </script>");

【讨论】:

    【解决方案2】:

    您可以在将代码渲染到屏幕之前使用以下代码。

    string htmlspecialchars_decode ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 ] )
    

    他的功能与htmlspecialchars()相反。它将特殊的 HTML 实体转换回字符。

    查看手册here

    【讨论】:

    • 但为什么要解码? stackoverflow.com/questions/1996122/…这里的答案显示了一些不同的东西?
    • 我怀疑这是错误的。如果开发人员想要接受文本(而不是 HTML),那么 htmlspecialcharshtmlentities 在模板文件中是合适的,因此尖括号作为实体输出。如果有开发人员想要接受 HTML,则需要清理 HTML,或者接受为 Markdown(或类似),然后转换为 HTML。
    猜你喜欢
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2013-07-02
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多