两个相关的问题应该很容易,尽管我的搜索是空的。
我有一个来自 PHP 的。如果字段中有分号,并且我在操作页面中转储 $_POST,则字段值在分号处被截断。我猜这与SQL注入安全性有关?但是需要允许使用合法的分号。是否有允许此通过的设置?还是我需要逃避它,如果是这样,怎么办?
要捕获实际的 SQL 注入,我不需要在一个查询中允许多个语句......比如“SELECT * FROM table;DROP table”。在 PHP 或 MySQL 中是否有禁用此功能但不停止合法分号的设置?
分号不会造成任何问题。
使用准备好的语句。
在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
}
$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);
mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");
检查此问题以获取更多信息如何防止 PHP 中的 SQL 注入?
好吧,我傻了。是的,我正在使用准备好的语句、转义等。但我也想在输入达到那么远之前对其进行清理。所以我有一个全局函数来检查所有参数,去掉撇号和分号后面的任何内容。适用于 GET 值,但我忘记了我需要更新它以以不同方式处理 POST 参数,并且忘记了它的存在,因为直到现在我还没有输入分号。:) 但感谢您的回复。