Php SQL注入的正确修复方法?
我的代码中有sql注入,我用havji检查了它 所以我考虑了一个解决方案,我将值的类型设置为整数或字符串 这样地。这会奏效吗?就像不再打针一样???没什么好担心的? 我的代码在下面, 对不起,我的英语不好Php SQL注入的正确修复方法?,php,mysql,sql-injection,Php,Mysql,Sql Injection,我的代码中有sql注入,我用havji检查了它 所以我考虑了一个解决方案,我将值的类型设置为整数或字符串 这样地。这会奏效吗?就像不再打针一样???没什么好担心的? 我的代码在下面, 对不起,我的英语不好 function get_page_by_id($page_id) { settype($page_id, "integer"); global $connection; $query = "SELECT * "; $query .= "FROM pages
function get_page_by_id($page_id) {
settype($page_id, "integer");
global $connection;
$query = "SELECT * ";
$query .= "FROM pages ";
$query .= "WHERE id=" . $page_id ." ";
$query .= "LIMIT 1";
$result_set = mysql_query($query, $connection);
confirm_query($result_set);
// REMEMBER:
// if no rows are returned, fetch_array will return false
if ($page = mysql_fetch_array($result_set)) {
return $page;
} else {
return NULL;
}
}
先编码后修复
function get_page_by_id($page_id) {
global $connection;
$query = "SELECT * ";
$query .= "FROM pages ";
$query .= "WHERE id=" . $page_id ." ";
$query .= "LIMIT 1";
$result_set = mysql_query($query, $connection);
confirm_query($result_set);
// REMEMBER:
// if no rows are returned, fetch_array will return false
if ($page = mysql_fetch_array($result_set)) {
return $page;
} else {
return NULL;
}
}
您通常要做的是使用准备好的语句。对于php,您可以阅读一个选项 下面是该页面中的示例
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
请尝试以下代码:
$page_id = mysql_real_escape_string(stripslashes($page_id));
我将努力了解更多关于准备好的状态!谢谢你的回答。但是现在设置类型是否解决了我的问题?既然我是一个初学者,除了其他人的答案,你可能还想研究一下(我需要改进)。我还是一个初学者:)作为一个初学者,你必须通读答案并明智地选择它们。否则你会有不愉快的结果。就像在这种情况下,由于某种原因,你接受了唯一一个根本不能保护你免受注射的答案。我不敢相信这个答案被接受了。