两个相关的问题应该很容易,但我的搜索结果是空的。
我在PHP中有一个来自。如果某个字段中有一个分号,并且我在操作页面中执行$ _POST转储,则会在分号处截断字段值。我猜这与SQL注入安全性有关?但是需要允许合法的半冒号。是否有允许此操作的设置?或者我是否需要逃避它,如果是这样,怎么办?
要捕获实际的SQL注入,我不需要在一个查询中允许多个语句...例如“SELECT * FROM table; DROP table”。是否有一个设置可以在PHP或MySQL中禁用此功能,但不会停止合法的分号?
答案 0 :(得分: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
}
$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);
mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");
查看此问题以获取更多信息How can I prevent SQL injection in PHP?
答案 1 :(得分:0)
好的,傻我。是的,我正在使用准备好的语句,转义等等。但是我还希望在它输入到目前为止之前对输入进行消毒。所以我有一个全局函数来检查所有参数,取出撇号和分号后的任何内容。适用于GET值,但是我忘了我需要更新它以不同的方式处理POST参数,并且忘记了它就在那里,因为到目前为止我还没有输入分号。 :)但感谢您的回复。