可能重复:
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>
答案 0 :(得分:1)
就个人而言,我只想做$out = str_replace("<","<",$in)
。它为用户提供了尽可能少的中断,并且他们最有可能获得他们输入的内容。
如果用户输入可能以HTML属性结尾(无论出于何种原因),您还应将"
替换为"
。
永远不要将用户提供的内容放入<script>
标记中,也不要在未先执行替换的情况下将其保存到文件中。
答案 1 :(得分:1)
尝试htmlspecialchars($string);
这会将所有HTML标记编码为字符代码(<div>
将成为<div>
,这将显示而不会被解析为html)这样,也无法创建脚本标记。
确保在将内容提供给数据库之前清理内容,例如通过使用mysqli_escape_string()
转义(其他人可能建议您使用prepare
语句)。
将HTML字符编码字符串放入数据库很可能不是最佳做法,因为它只会不必要地增加字符串大小。 (并且它本身不提供针对SQL注入的保护)
答案 2 :(得分:1)
除非您实时检查用户的输入并且在检测到输入标记时专门阻止它们,否则您无法禁用“从输入字段输入html,php,脚本的能力”。然而,我没有看到任何人想要的理由,正确的方法是在提交时正确处理用户的输入。
对于html标签或php代码或类似的东西,你绝对可以使用escapehtml或strip_tags,但如果你以后将内容放入mysql,我必须提醒你sql注入攻击。
如果您不熟悉该术语,用户可以键入干扰您的SQL查询的mysql查询。如果我们盲目地将用户提供的内容插入到我们的“INSERT”语句中,那些语句可能会被用户输入中的sql关键字更改。
有关防止SQL注入攻击的方法,您可以查看wiki的页面以获得良好的开端:http://en.wikipedia.org/wiki/SQL_injection#Mitigation