即使使用mysql_real_escape_string()函数,是否存在SQL注入的可能性?
考虑这个示例情况.SQL是用PHP构造的,如下所示:
$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));
$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
Run Code Online (Sandbox Code Playgroud)
我听过很多人对我说,这样的代码仍然很危险,即使使用了mysql_real_escape_string()函数也可以破解.但我想不出任何可能的漏洞?
像这样的经典注射:
aaa' OR 1=1 --
Run Code Online (Sandbox Code Playgroud)
不工作.
你知道任何可能通过上面的PHP代码注入的注入吗?
我正在查看文档并偶然发现mysql_real_escape_string(),我不明白为什么它只是在addslashes()时才有用.有人能告诉我一个有用的原因吗?
我也很好奇它为什么需要数据库连接....这似乎是很多开销.
我从不同的博客中发现,强烈建议用它htmlspecialchars()来输出屏幕上的任何数据以免安全XSS Attack.
我filter_input()用来过滤插入之前来自用户的任何数据database.filter_input()转换特殊字符,如'到'并保存它的方式,像
I'm going to shopping with Molly's sister;Dolly
Run Code Online (Sandbox Code Playgroud)
我的问题是
How can I print(output) apostrope or quotes and specific special characters to users screen using htmlspecialchars so that the output would be user friendly
我试图使用htmlspecialchars($post,ENT_NOQUOTES);,但它给了我存储在数据库中的相同数据副本.如果我不使用htmlspecialchars(),只$post给我预期的结果,我认为很容易XSS Attack
感谢您的时间,并期待从同行那里获得帮助.
编辑
我有建议使用htmlspecialchars_decode()或html_entity_decode()回答,但(/sf/users/93680471/͢ck)和其他一些建议不要使用这些functions来输出屏幕上的数据.
请注意我正在使用prepared statement和parameterized query.但我不想保留任何安全漏洞,这就是为什么在发送到数据库之前过滤数据.
因为我曾经filter_input()在发送到数据库之前过滤数据,所以直接$post=$posted_data; …
是否有替代PHP的mysql_real_escape_string.我想删除在文本框中输入的任何javascript或php代码.