我从mysql数据库中获取文本,并通过URL中的ID获取它:
site.php?id = 1等等
什么被认为是最安全的防止SQL注入和东西。这样做是否正确:
<?php
$news_id = $_GET['news_id'];
if(!is_numeric($news_id)) die('Wrong');
//mysql_query and stuff here
?>
或者这样:
<?php
$news_id = $_GET['news_id'];
if(!intval($news_id)) die('Wrong');
//mysql_query and stuff here
?>
答案 0 :(得分:6)
为什么不使用预准备语句,这是处理sql注入攻击的正确方法。
但是,使用intval将字符串转换为整数,然后将其放入预准备语句中,您将受到保护,因为int值可能为零或负数,因此不会从查询中返回任何内容
答案 1 :(得分:3)
$news_id = (int)@$_GET['news_id'];
if ($news_id <= 0) die ('Wrong');
假设news_id
为正(> 0)。
答案 2 :(得分:1)
如果使用intval,则无法使用news_id = 0,因为如果news_id不是数字,则intval将始终返回0。 在您的情况下,is_numeric更合适,更安全。
答案 3 :(得分:0)
is_numeric不是检查它的好方法,
$number = "4"; // string ? int ?
intval不返回true或false。所以你不能像你写的那样使用它。 试试这个
if(intval($news_id) === (int)$news_id){
//code goes here
}
或
if(intval($news_id) == $news_id){
//code goes here
}
答案 4 :(得分:0)
if (preg_match("/^[1-9]+\d*$/", $news_id)){
// you're good to go
}