2

可能重复:
在 PHP 站点中避免 xss 攻击的最佳实践是什么

我有一个表格,用户可以填写他们的个人信息。用户提交表单,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>
4

3 回答 3

2

尝试htmlspecialchars($string);

这会将所有 HTML 标记编码为字符代码(<div>将变为&lt;div&gt;,将在不被解析为 html 的情况下显示)这样,也无法创建脚本标记。

确保在将内容提供给数据库之前清理内容,例如通过转义mysqli_escape_string()(其他人可能会建议您使用prepare语句)。

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

于 2012-08-20T21:56:09.270 回答
1

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

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

永远不要将用户提供的内容放入<script>标签中,也不要在没有先执行替换的情况下将其保存到文件中。

于 2012-08-20T21:46:23.283 回答
1

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

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

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

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

于 2012-08-20T22:03:07.270 回答