从输入字段禁用html标记,php,脚本

时间:2012-08-20 21:42:59

标签: php javascript html input

  

可能重复:
  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>

3 个答案:

答案 0 :(得分:1)

就个人而言,我只想做$out = str_replace("<","&lt;",$in)。它为用户提供了尽可能少的中断,并且他们最有可能获得他们输入的内容。

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

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

答案 1 :(得分:1)

尝试htmlspecialchars($string);

这会将所有HTML标记编码为字符代码(<div>将成为&lt;div&gt;,这将显示而不会被解析为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