【问题标题】:PDO and Escaping Input: Is this the safest way?PDO 和转义输入:这是最安全的方法吗?
【发布时间】:2013-09-26 02:17:24
【问题描述】:

我想在上线之前检查一下自己。我在互联网上阅读了很多不同的东西,但我想知道这是否会绝对保护我的 SQL 注入代码。如果没有,我需要添加或删除什么?

$idtoapprove = mysql_real_escape_string($_POST['idtoapprove']);

$getcity = $conn->prepare('SELECT city, state FROM needs WHERE ID=:idtoapprove');
$getcity->bindParam(':idtoapprove', $idtoapprove);
$getcity->execute();

$cityrow = $getcity->fetch();
$needcity = $cityrow['city'];
$needstate = $cityrow['state'];

echo "$needcity, $needstate";

【问题讨论】:

    标签: php mysql pdo sql-injection


    【解决方案1】:

    这里不需要mysql_real_escape_string,实际上,这是完全错误的(它来自不同的、已弃用的数据库库)并且可能会损坏您的数据。 (另外,无论如何,它在这里是无效的 - mysql_real_escape_string() 用于转义字符串,它对整数无用。)

    PDO 准备好的语句就足够了。

    【讨论】:

    • 你甚至可以检查你是否真的收到了一个 ID,所以 INT > 0。
    • 为了进一步解释,如果没有通过ext/mysql API 的活动数据库连接,mysql_real_escape_string 将无法正常工作,而 OP 不太可能拥有。使用它也会两次转义数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2011-04-06
    • 2012-12-25
    相关资源
    最近更新 更多