为了账号安全,请及时绑定邮箱和手机立即绑定

PHP:mysql_real_escape_string是否足以清除用户输入?

PHP:mysql_real_escape_string是否足以清除用户输入?

LEATH 2019-07-27 09:50:33
PHP:mysql_real_escape_string是否足以清除用户输入?mysql_real_escape_string在大多数情况下是否足以清理用户输入?::编辑::我主要考虑的是防止SQL注入,但我最终想知道在应用mysql_real_escape_string之后是否可以信任用户数据,或者我应该采取额外措施来清理数据,然后再将其传递给应用程序和数据库。我知道清除HTML字符的位置很重要,但我不认为有必要信任用户输入。Ť
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

你的问题的答案是否定的。没有mysql_real_escape_string()不适合所有用户输入,mysql_real_escape_string()不会停止所有sql注入。addslashes()是另一个在php中使用的流行函数,它也有同样的问题。

弱势代码:

mysql_query("select * from user where id=".mysql_real_escape_string($_GET[id]));

poc exploit:

http://localhost/sql_test.php?id=1 or sleep(500)

补丁是在id周围使用引号:

mysql_query("select * from user where id='".mysql_real_escape_string($_GET[id])."'");

真正最好的方法是使用一些人们指出的参数化查询。Pdo运行良好,adodb是另一个流行的php库。

如果你确实使用mysql_real_escape_string应该只用于sql注入,而不是别的。漏洞高度依赖于数据的使用方式。人们应该逐个功能地应用安全措施。是的,XSS是一个非常严重的问题。不对html进行过滤是一个严重的错误,黑客会用它来解决你的问题。请阅读xss常见问题解答


查看完整回答
反对 回复 2019-07-27
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

对于数据库,是的。您还需要考虑为输出充分转义/编码数据。

您还应该考虑根据预期验证输入。

你考虑过使用准备好的陈述吗?PHP提供了许多与数据库交互的方法。其中大多数都比mysql_ *函数更好。

PDOMDB2MySQL改进应该让你入门。


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 692 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信