0

我的代码中有一个 sql 注入,我用 havji 检查了它。

所以我正在考虑一个修复,我将我的值的类型设置为整数或这样的字符串。这可以解决问题吗?就像不再注射一样???没什么好担心的 ?我的代码在下面,对不起我的英语不好!

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;
    }
}
4

2 回答 2

0

您通常想要做的是使用准备好的语句。对于 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();
?>
于 2013-06-08T13:25:13.437 回答
-1

试试下面的代码:

$page_id = mysql_real_escape_string(stripslashes($page_id));
于 2013-06-08T14:13:32.033 回答