我有一个包含许多字段的表单......
操作设置为查询mysql的php页面...
我应该使用mysql_real_escape_string
每个变量进行消毒吗?
或者我可以忽略清理丢弃列表和无线电吗?
另外,除了mysql_real_escape_string
之外,我还应该做些什么来防止攻击?
由于
答案 0 :(得分:5)
您也必须检查选择和单选按钮。任何人都可以创建自己的HTML表单并将其发布到您的脚本中。 Firefox扩展 Web Developer Toolbar 甚至可以选择将选择转换为文本输入。
您还可以检查发布的数据是否只包含正确的值。例如,如果您有一个单选按钮,请确保发布的表单只包含一个有效值。
当然,您应该只对要放入MySQL的变量运行mysql_real_escape_string。如果保存到文件,在命令行或其他任何其他方面使用,则有更多适当的功能和解决方案。
答案 1 :(得分:2)
通常,在浏览器之外形成POST请求是微不足道的,因此可以绕过下拉列表(例如)可能对可能的值施加的任何限制。
因此,您应始终将用户数据视为恶意且容易出错,并尽可能在服务器端进行验证和保护。
答案 2 :(得分:2)
另一堆无知的答案。 Camran,你像磁铁一样吸引着它。
您必须了解mysql_real_escape_string 与表单和无线电无关,并进行检查和清理。
它并不能阻止攻击。
它只是一个字符串转义函数。它转义将作为字符串数据插入SQL查询字符串的数据。
SQL查询是一个小程序。用它自己的语法。您必须遵循该语法,不是因为“攻击”,而是因为它只是一种语法。当然,这些规则并不依赖于数据来源!单选按钮,html表单或浏览器 - 都无所谓!
它只适用于字符串。不是数字也不是标识符。
以下是关于如何处理SQL查询的答案: In PHP when submitting strings to the database should I take care of illegal characters using htmlspecialchars() or use a regular expression?
答案 3 :(得分:1)
在SQL语句中使用字符串之前,只需使用mysql_real_escape_string来转义字符串,以防止SQL注入攻击。
此外,在从数据库中取出数据并将其作为HTML写出时,您应该考虑使用htmlspecialchars或strip_tags来防止跨站点脚本攻击。
答案 4 :(得分:1)
从客户端发送的任何变量都不能被视为安全有效。如果您在查询中使用它们,则应始终清理它们。
答案 5 :(得分:0)
您只需清理不希望攻击者劫持的字段。数据可以是任何来源,而不仅仅是您的页面。 mysql_real_escape_string
适用于将连接到查询中的任何值,但我会“清理”所有内容。对我而言,“清理”不仅仅意味着处理注入攻击,它还包括任何字段验证(刺痛长度,数字,有效日期,空白等)。