Php 我应该清理传递的每个表单变量吗?
我有一个有很多字段的表单 该操作设置为查询mysql的php页面 我应该用Php 我应该清理传递的每个表单变量吗?,php,sql,mysql,database,security,Php,Sql,Mysql,Database,Security,我有一个有很多字段的表单 该操作设置为查询mysql的php页面 我应该用mysql\u real\u escape\u string清理每个变量吗? 或者我可以忽略消毒下拉列表和收音机吗 另外,除了mysql\u real\u escape\u string,我还应该做些什么来防止攻击 谢谢在SQL语句中使用字符串之前,您只需要使用来转义字符串,以防止SQL注入攻击 此外,当从数据库中取出数据并将其写入HTML时,应考虑使用或防止跨站点脚本攻击。 也必须检查选择和单选按钮。任何人都可以创建自己
mysql\u real\u escape\u string
清理每个变量吗?
或者我可以忽略消毒下拉列表和收音机吗
另外,除了mysql\u real\u escape\u string
,我还应该做些什么来防止攻击
谢谢在SQL语句中使用字符串之前,您只需要使用来转义字符串,以防止SQL注入攻击
此外,当从数据库中取出数据并将其写入HTML时,应考虑使用或防止跨站点脚本攻击。
也必须检查选择和单选按钮。任何人都可以创建自己的HTML表单并将其发布到脚本中。Firefox ExtensionWebDeveloper工具栏甚至有一个将选择转换为文本输入的选项
您还可以检查发布的数据是否只包含正确的值。例如,如果您有一个单选按钮,请确保发布的表单只包含一个有效值当然,您应该只对要放入mysql的变量运行mysql\u real\u escape\u字符串。如果保存到文件中,使用命令行或其他任何东西,则有更多适当的功能和解决方案。 < P>从客户端发送的任何变量都不能被认为是安全和有效的。如果您在查询中使用它们,您应该始终清理它们。一般来说,在浏览器之外形成POST请求并不重要,因此可以绕过下拉列表(例如)对可能值施加的任何限制
因此,您应该始终将用户数据视为恶意和容易出错的数据,并在服务器端尽可能多地进行验证和保护。您只需清理不希望攻击者劫持的字段即可。数据可以来自任何来源,而不仅仅是您的页面
mysql\u real\u escape\u string
适用于将连接到查询中的任何值,但我会“清理”所有内容。对我来说,“清理”不仅仅意味着处理注入攻击,它还包括任何字段验证(sting长度、数字、有效日期、空等)。另一堆无知的答案。卡姆兰,你像磁铁一样吸引它
您必须了解mysql\u real\u escape\u string与表单和收音机、检查和消毒无关。而且它不能阻止攻击 它只是一个字符串转义函数。它转义将作为字符串数据插入SQL查询字符串的数据 SQL查询是一个小程序。使用它自己的语法。你必须遵循这个语法,不是因为“攻击”,而是因为它只是一个语法。当然,这些规则并不依赖于数据源!单选按钮、html表单或浏览器-一切都不重要 它只对字符串有效。没有数字或标识符 以下是我对如何处理SQL查询的回答:
我认为最好使用htmlspecialchars()。strip_标记并非总是按预期工作。无论是htmlspecialchars还是mysql_real_escape_字符串,在任何情况下都不能起到神奇的作用,请查看没有从客户端发送的变量的情况。记住,mysql_real_escape_字符串只有在结果sql语句中用单引号分隔转义值时才可以安全使用。更好的方法是:忘记字符串转义,只使用绑定的sql参数。