PHP + SQL 脚本 - 防止 SQL 注入(inject)

标签 php mysql

我正在使用 unity 通过 HTTP GET 将值传递到我的 php 脚本。我是 php 新手,刚刚让我的脚本正常工作,但是,我想确保我可以防止 SQL 注入(inject)。有人可以看一下这个并让我知道我需要更改什么才能保护它吗?

<?php

$servername = "localhost";
$username = "Test";
$password = "Test";
$dbname = "Test";

$userId = $_GET['userId'];

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT rp FROM RP where userID = '$userId'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        //echo "UserID: " . $row["userID"]. " - RP: " . $row["rp"]."<br>";
    echo "RP: " . $row["rp"]."<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>

最佳答案

在这种特殊情况下,您可以检查 $_GET['userId'] 是否为数字 is_numeric() 。如果不是,则触发错误并退出。

但这仅适用于像这样的简单情况。您应该阅读以下内容:How can I prevent SQL-injection in PHP?

你需要的是所谓的准备好的语句,据我所知,理论上它应该是不可能被破坏的。 您将能够在 Mysqli 和 PDO 中的准备语句之间进行选择。它的灵 active 非常非常小,所以我的建议是在一周中的任何一天都使用 PDO。

只是为了澄清 - 你的代码完全容易被注入(inject)。所需要做的就是在查询字符串中使用 Mysql 命令,脚本将像您编写的那样执行它。

关于PHP + SQL 脚本 - 防止 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30968444/

相关文章:

php - 设置窗口位置为同一页面 PHP 购物车

php - 如何为在线约会网站设计用户表?

php - 在 PHP 中使用 While 语句获取 undefined index

php - 如果记录存在则 Laravel 更新或如果不存在则创建

php - 检查文件是否包含光栅或矢量元素? (pdf, eps, ai)

mysql 在带有连接查询的小表上性能低下

php - 添加更新或删除 WooCommerce 运输订单项目

mysql - 当重复项是不同的唯一列时,如何防止 MySQL 在使用 ON DUPLICATE KEY UPDATE 时自动递增主键?

mysql - 在 MySQL 中连接表并对列进行求和

php - 通过PHP解析字典对象并创建MySQL表