【问题标题】:disable html tag, php, script from input field [duplicate]从输入字段中禁用 html 标记、php、脚本 [重复]
【发布时间】:2012-08-20 21:42:59
【问题描述】:

可能重复:
What are the best practices for avoiding xss attacks in a PHP site

我有一个表格,用户可以填写他们的个人信息。用户提交表单,Web 服务将处理这些信息并将信息存储在 mysql 数据库中。

但是如果用户在输入字段中输入 html 标记、php 代码或 javascript 会怎样。我想防止这种情况发生。我知道在javascript中有一个方法调用escapehtml,在php中它是strip_tags。

我只想知道禁用从输入字段键入 html、php、脚本的能力的正确方法。我是否对收到的所有输入使用 strip_tags?如果我使用 strip_tags,如何禁用脚本?或者在 mysql 中可以做到这一点?

谢谢

这是表格:

<div>
    <label class='info-title whitetext' for="name">Full Name: </label>
    <input type="text" name="name" id="name" size='25' maxlength="100" required />
</div>

<div>
    <label class='info-title whitetext' for="phone">Phone: </label>
    <input type='text' pattern='\d+' name='phone' id='phone' size='25' maxlength='12' />
</div>

<div>       
    <label class='info-title' for="email">Email: </label>
    <input type="email" name="email" id="email" size='35' maxlength="60" required />
</div>

<div>       
    <label class='info-title' for="address">Address: </label>
    <input type="text" name="address" id="address" size='45' maxlength="50" required />
</div>

【问题讨论】:

    标签: php javascript html input


    【解决方案1】:

    试试htmlspecialchars($string);

    这会将所有HTML标签编码为字符代码(&amp;lt;div&amp;gt;会变成&amp;lt;div&amp;gt;,不会被解析为html就显示出来)这样一来,脚本标签也无法创建。

    请务必在将内容提供给数据库之前对其进行清理,例如使用mysqli_escape_string() 转义(其他人可能会建议您使用prepare 语句)。

    将 HTML 字符编码的字符串放入数据库很可能是不是的最佳实践,因为它只会不必要地增加字符串大小。 (而且它本身不提供针对 SQL 注入的保护)

    【讨论】:

      【解决方案2】:

      就个人而言,我只是喜欢$out = str_replace("&lt;","&amp;lt;",$in)。它为用户提供了尽可能少的干扰,并且他们最有可能得到他们输入的内容。

      如果用户输入可能以 HTML 属性结尾(无论出于何种原因),您还应该将 " 替换为 &amp;quot;

      切勿将用户提供的内容放入 &lt;script&gt; 标记中,也不要在未执行替换之前将其保存到文件中。

      【讨论】:

      • 这样的问题是&-符号会在HTML中显示为&amp;amp;,这是无效的。它应该输出为&amp;amp;。当然,您也可以编辑脚本来执行此操作,但使用htmlspecialchars() 或类似功能会更容易。
      【解决方案3】:

      您不能禁用“从输入字段键入 html、php、脚本的能力”,除非您实时检查用户的输入并在检测到输入标签时专门阻止他们。但是我看不出有人想要这样做的原因,正确的方法是在提交时正确处理用户的输入。

      对于html标签或者php代码之类的东西,你肯定可以使用escapehtml或者strip_tags,但是如果你以后把内容放到mysql中,我不得不提醒你sql注入攻击。

      如果您不熟悉该术语,用户可以键入干扰您的 sql 查询的 mysql 查询。如果我们盲目地将用户提供的内容插入到“INSERT”语句中,这些语句可能会被用户输入中的 sql 关键字更改。

      关于防止sql注入攻击的方法,您可以查看wiki的页面以获得良好的开始:http://en.wikipedia.org/wiki/SQL_injection#Mitigation

      【讨论】:

        猜你喜欢
        • 2017-06-30
        • 2022-08-19
        • 2012-11-04
        • 2011-11-19
        • 2017-05-19
        • 2012-09-30
        • 2020-03-07
        • 1970-01-01
        • 2013-02-12
        相关资源
        最近更新 更多