当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《PHP:mysql_real_escape_string是否足以清除用户输入?》经验,为你挑选了3个好方法。

mysql_real_escape_string在大多数情况下是否足以清理用户输入?

::编辑::

我主要考虑的是防止SQL注入,但我最终想知道在应用mysql_real_escape_string之后是否可以信任用户数据,或者我是否应该采取额外措施来清理数据,然后再将其传递给应用程序和数据库.

我知道清除HTML字符的位置很重要,但我不认为有必要信任用户输入.

Ť



1> Sarfraz..:

mysql_real_escape_string在所有情况下都不够,但绝对是非常好的朋友.该更好的解决方案是使用预处理语句

//example from http://php.net/manual/en/pdo.prepared-statements.php

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

此外,不要忘记可用于丢弃任何无效/可疑字符的HTMLPurifier.

...........

编辑: 根据以下评论,我需要发布此链接(我应该在抱歉创建混淆之前完成)

mysql_real_escape_string()与准备语句

引用:

mysql_real_escape_string()容易出现影响addslashes()的同类问题.

Chris Shiflett(安全专家)


举一个不充分的例子,但是准备好的陈述在哪里.
实际上没有,mysql_real_escape_string并不总是安全的.你应该重新发帖子.
不要忘记使用准备语句获得的性能提升!

2> rook..:

你的问题的答案是否定的.没有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常见问题解答.


对,再说一次.但就像我上面提到的那样,它不是`mysql_real_escape_and_quote_string()`.而且,该函数本身并不存在问题,但其使用*不正确*.我还是想看一个`mysql_real_escape_string()`不足的例子.
这与mysql_real_escape_string()防止注入的能力有什么关系?正确引用或将您的值转换为整数.
是的,但这并不会使`mysql_real_escape_string()`不适合用于SQL的*转义*字符串.编辑:是的,准备好的陈述更好.
不,显然我没有.你的论证似乎类似于说while()对迭代没有用,因为你可以做while(1);

3> jasonbar..:

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

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

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

PDO,MDB2和MySQL改进应该让你入门.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有