gpt4 book ai didi

php - 这将如何影响防止 SQL 注入(inject)的机会?

转载 作者:可可西里 更新时间:2023-11-01 00:10:36 24 4
gpt4 key购买 nike

我以前发过关于这个的帖子,但从来没有在这方面发帖,所以请看一看:

有人告诉我进行 sql 注入(inject)的一种方法是使用 1=1,这样某人就可以看到所有不属于他们的条目。

但是假设我构建了我的查询,以便它也选择当前用户的 user_id,这样行得通吗:

  $userid = Current users stored id in database;
$postid = mysql_real_escape_string($_GET['id']);

现在假设我输入:domain.com/page.php?id='' OR '1'='1'

Select article_name from table where user_id=$userid and post_id=$postid

自从我添加了 User_id 障碍后,查询是否仍会返回所有内容?

最佳答案

如果您使用 PDO,则不必担心转义数据(在这种情况下):

$stmt = $pdo->prepare('SELECT article_name FROM table WHERE user_id = :userid AND post_id = :postid');
$stmt->execute(array(
':userid' => $userid,
':postid' => intval($_GET['id']) //Just to be safe
));

// You could also do this instead (thanks @Digital Precision)
//$stmt->bindValue(':postid', $_GET['id'], PDO::PARAM_INT);
//$stmt->execute(array(':userid' => $userid));

while($row = $stmt->fetch()) {
//Work with data
}

有关 PDO 的更多信息,请参阅 PHP docs .

使用mysql_real_escape_string()的问题顾名思义,它只转义字符串。它转义可用于终止字符串的字符,以便攻击者无法关闭字符串并输入恶意 SQL。如果你很顽固并且拒绝使用 PDO,你可以使用类似 intval() 的函数。在任何未净化的整数上,以确保它们只包含数字。

$post_id = intval($_GET['id']); //Now $post_id can only be a number

关于php - 这将如何影响防止 SQL 注入(inject)的机会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8289083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com