我正在使用 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/