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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

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

我主要考虑的是防止SQL注入,但我最终想知道在我应用MySQL之后是否可以信任用户数据[医]实[医]逃逸[医]字符串,或者在将数据传递给应用程序和数据库之前,我应该采取额外的措施来清理数据。

我知道在哪里清理HTML字符很重要,但我不认为有必要信任用户的输入。

提问于
用户回答回答于

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();
用户回答回答于

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

易受攻击的代码:

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

POC利用:

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只应用于SQL注入,而不应用于其他任何操作。漏洞很大程度上取决于数据的使用方式。应按职能采取安全措施。是的,XSS是一个非常严重的问题没有过滤html是一个严重的错误,黑客将使用你的pw3n。

扫码关注云+社区