在PHP中防止HTML和SQL注入

时间:2013-04-01 21:34:41

标签: php html sql-injection

之前,我使用方法htmlspecialchars($x)来阻止HTML标记和文本字段上的一些SQLi。但是我注意到它不是阻止它的最好方法,因为单引号“'()占用了数据库的一些空间。另外,对于最大长度。例如,在文本字段上,我把最大值 - 长度为1000个字符。但如果人们使用simbols直到最大长度(1000个字符),用户将遇到一些麻烦,因为我在服务器上验证它。

实施例: 用户输入1000个字符,他不能再输入了。大约30个字符是符号。因此,在验证时,它将显示超过1000个字符,并且不会对其进行验证。

我清楚了吗?我怎么能阻止这两个问题?

先谢谢。

2 个答案:

答案 0 :(得分:3)

假设“SQLi”是“SQL注入”,那么htmlspecialchars将无法保护您免受所有中的查询。 htmlspecialchars只应用于显示。您需要正确地参数化您的查询,以便为存储对输入进行适当的清理。

  1. 用户提交表单
  2. 如果原始输入验证
  3. ,则使用用户输入运行参数化准备好的查询
  4. 用户观看页面
  5. 您选择原始输入
  6. 在将输入发送回用户
  7. 之前,请在输入上使用htmlspecialchars

答案 1 :(得分:0)

您还可以使用htmlspecialchars()来存储数据,也可以像Google+一样。尝试使用移动设备https://plus.google.com/app/basic/s?q=Developing+%22Web%22+Sites在移动设备中查看此内容并向下滚动。有一个实体名称,如& amp; amp; amp; amp; amp; amp; amp; amp; amp;你也可以使用< meta charset =" ISO-8859-1">作为您网站的字符集,以避免HTML标记注释,例如< / div>,破坏您的样式。也许你的网站很容易受到XSS的攻击。所以,使用htmlspecialchars()来存储数据!并且是一个真正的编码器,总是使用mysql_real_escape_string()检查MySQL输入以避免续集注入攻击。请查看以下内容:http://evilzone.org/tutorials/sql-injection/和www.w3schools.com/php/func_mysql_real_escape_string.asp