Eri*_*ric 2 php mysql security sql-injection
我有一个反馈表单,它将带有几个用户输入的字段以及PHP函数生成的一些字段,如'user-agent'和'referer'.
我的问题是输入之前应该是这些字符串吗?我意识到可以轻松改变用户代理和引用页面,但是访问者是否可以添加类似字符串的SQL注入,这样当PHP提取此信息时它可能会破坏我的表单?
例如,如果用户更改了其用户代理或引用页面以包含该字符串 Robert'); DROP TABLE Students;--
"消毒"这个词很模糊,甚至是欺骗.
实际上,根本不需要"消毒"字符串.你只需要格式化它们.
所以,最好使用更准确的术语.
如果你谈论转义,答案很简单:
你必须逃避任何你要进行查询的字符串,尽管它的来源,内容或目的.
这不是因为孩子们从一些愚蠢的漫画中吓唬故事.
它只是查询中字符串数据的正确格式:您必须将其括在引号中,从而转义可能存在于数据中的这些分隔符.
看到?与告诉您仅"清理"用户输入的所有其他答案不同,在现实世界中,您必须逃避每个字符串.不要自问"我是否应该消毒某些东西?".你应该.期.
请注意 ,对于任何其他查询部分,例如数字或标识符,转义完全没用,并且将"清理"任何内容.
准备好的语句也遵循相同的规则:
对于任何数据,始终使用它,而不仅仅是"不受信任的用户输入".
简单答案:验证/清理/转义所有内容 (例如客户端数据),因为所有内容都可能被修改和破坏,或者包含可能破坏查询的意外字符(如Shrapnel 上校解释的那样)。
为了最大限度地降低风险,您还应该使用准备好的语句,而不是自己构建 SQL 字符串(注意:这并不意味着您可以省略检查)。