0

两个相关的问题应该很容易,尽管我的搜索是空的。

  1. 我有一个来自 PHP 的。如果字段中有分号,并且我在操作页面中转储 $_POST,则字段值在分号处被截断。我猜这与SQL注入安全性有关?但是需要允许使用合法的分号。是否有允许此通过的设置?还是我需要逃避它,如果是这样,怎么办?

  2. 要捕获实际的 SQL 注入,我不需要在一个查询中允许多个语句......比如“SELECT * FROM table;DROP table”。在 PHP 或 MySQL 中是否有禁用此功能但不停止合法分号的设置?

4

2 回答 2

1

分号不会造成任何问题。

使用准备好的语句。

mysqli中:

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name);

$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // do something with $row
}

PDO中:

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute(array(':name' => $name));

foreach ($stmt as $row) {
    // do something with $row
}

利用mysql_real_escape_string

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");

检查此问题以获取更多信息如何防止 PHP 中的 SQL 注入?

于 2013-04-27T03:01:33.857 回答
0

好吧,我傻了。是的,我正在使用准备好的语句、转义等。但我也想在输入达到那么远之前对其进行清理。所以我有一个全局函数来检查所有参数,去掉撇号和分号后面的任何内容。适用于 GET 值,但我忘记了我需要更新它以以不同方式处理 POST 参数,并且忘记了它的存在,因为直到现在我还没有输入分号。:) 但感谢您的回复。

于 2013-04-27T03:44:22.357 回答