我应该清理传递的每个表格变量吗?

时间:2010-06-09 13:22:40

标签: php sql mysql database security

我有一个包含许多字段的表单......

操作设置为查询mysql的php页面...

我应该使用mysql_real_escape_string每个变量进行消毒吗? 或者我可以忽略清理丢弃列表和无线电吗?

另外,除了mysql_real_escape_string之外,我还应该做些什么来防止攻击?

由于

6 个答案:

答案 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写出时,您应该考虑使用htmlspecialcharsstrip_tags来防止跨站点脚本攻击。

答案 4 :(得分:1)

从客户端发送的任何变量都不能被视为安全有效。如果您在查询中使用它们,则应始终清理它们。

答案 5 :(得分:0)

您只需清理不希望攻击者劫持的字段。数据可以是任何来源,而不仅仅是您的页面。 mysql_real_escape_string适用于将连接到查询中的任何值,但我会“清理”所有内容。对我而言,“清理”不仅仅意味着处理注入攻击,它还包括任何字段验证(刺痛长度,数字,有效日期,空白等)。