[PDO安全方法可从sql注入中获取安全代码,但使用kali仍可导致注入[duplicate]

问题描述 投票:-4回答:1

我已经用google搜索了用户发布的数据并进行了清理,发现了很多示例和函数,但是我还没有找到任何可以帮助我解决困惑的解决方案。

我的问题是,在以下php mysqli内置函数中基本完成了什么:

  // Sanitize. example:
  $x = mysqli_real_escape_string($con, $posted_val));

PDO或核心php中是否有任何内置功能可以用来清理用户发布的数据?

我试图通过替换可能的可利用代码来使用我自己的函数来清理输入,然后返回结果,但是我希望PDO中也可能存在一些内置函数出口吗?否则我可能错了...

php pdo sanitization
1个回答
-1
投票

基本上,使用PDO只需对数据进行参数化即可防止SQL注入。如果不进行参数设置,您的数据库仍可用于注入。您可以在将值传递到SQL语句之前自行实施清理操作]

参数化PDO语句的简单示例:

<?php
// Connecting to database with values defined in 'database.php'
include_once 'database.php';

$db = new PDO($DB_DSN, $DB_USER, $DB_PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Function that takes SQL statement and parameters for it
function query($sql, $params = []) {

    $stmt = $db->prepare($sql);

    // Simple preparing and binding parameters to PDO::prepare()
    if (!empty($params)) {
        foreach ($params as $key => $val) {
            if (is_int($val)) {
                $type = PDO::PARAM_INT;
            } elseif (is_bool($val)) {
                $type = PDO::PARAM_BOOL;
            } else {
                $type = PDO::PARAM_STR;
            }
            $stmt->bindValue(':'.$key, $val, $type);
        }
    }

    // Executing SQL
    $stmt->execute();
    return $stmt;
}

// I declare here simple variables that I'm usually getting from AJAX POST method
$id = "1";
$email = "[email protected]";

// SQL statement
$sql = 'SELECT * FROM `users` WHERE id = :id AND email = :email LIMIT 1';
// Parameters that will pass
$params = ['id' => $id, 'email' => $email];

// Executing SQL and saving return in variable
$result = query($sql, $params);

// Returning result
return $result;

因此,通过这种做法,黑客将无法查看其他任何数据,除非这些数据被传递到变量中并且无法对其进行注入

更多阅读:

© www.soinside.com 2019 - 2024. All rights reserved.