0

私は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
?>
4

5 に答える 5

6

SQLインジェクション攻撃に対処する正しい方法である準備済みステートメントを使用しないのはなぜですか.

ただし、 intval を使用して文字列を整数に変換し、それを準備済みステートメントに入れるだけで、 int 値がゼロまたは負になる可能性があるため、クエリから何も返されないため、保護されます。

于 2009-09-04T20:33:58.630 に答える
3
$news_id = (int)@$_GET['news_id'];
if ($news_id <= 0) die ('Wrong');

news_id正 (>0) であると仮定します。

于 2009-09-04T20:30:14.987 に答える
1

intval を使用する場合、news_id=0 を使用することはできません。これは、news_id が数値でない場合、intval は常に 0 を返すためです。あなたの場合、 is_numeric はより適切で安全です。

于 2009-09-04T20:32:43.110 に答える
0
if (preg_match("/^[1-9]+\d*$/", $news_id)){
    // you're good to go
}
于 2011-12-21T01:08:36.647 に答える
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
}
于 2009-09-04T20:30:00.960 に答える