2011-12-13 4 views
0

その私のデータベーステーブル内の二つのフィールド(note_nameとnote_description)の編集について、私は、このようなフォームからリンクして、新しいフィールドからいくつかの情報を取る:LINKS経由のSQLインジェクション?

LINK:

/main_edit.php?edit=note_name2&type=PHP 

AND:

elseif(isset($_GET['edit'])){ 
     $note_type=$_GET['type']; 
     $old_note_name=$_GET['edit']; 
     $new_note_name=mysql_real_escape_string($_POST['new_note_name']); 
     $new_note_description=mysql_real_escape_string($_POST['new_note_description']); 
     $query="UPDATE functions 
       SET note_name='{$new_note_name}', 
       note_description='{$new_note_description}' 
       WHERE note_name='{$old_note_name}' 
       "; 
     $result = mysql_query($query, $connection);} 

はSQLインジェクション経由ですリンクはここで可能ですし、そうであればどのようにそれから守りますか?

ありがとうございます!

答えて

-1

を - あなたには、いくつかの理由で$old_note_nameをエスケープしていない、そしてそれは、クエリそれの終わりであることを最も脆弱な変数です。あなたは何をすべきかを知っているようです...他の人と同じように、その変数にmysql_real_escape_stringを使用してください。

それ以外の場合、これはかかるだろうすべてです: /main_edit.php?type=PHP&edit=note_name2';drop table functions;#

+0

はFYI:回答が自分の答えを向上させることができるように、典型的には、1つは投票ダウンのコメントを残します。コメントのない投票は無意味です。 –

1

はいあなたは何をこの試してみについて.. $_GET['edit']をエスケープしていない原因:はい

$old_note_name=mysql_real_escape_string($_GET['edit']); 
0

変更この: -

$old_note_name= mysql_real_escape_string($_GET['edit'], $connection); 

そして

をmysql_real_escape_stringの機能するために、すべての呼び出しに$接続を適用するには

$old_note_name=$_GET['edit']; 

最後に、あなたが準備されたステートメントを使用することができますmysqliまたはPDO

4

、のようなもの:

$query = "UPDATE functions SET note_name=?, note_description=? WHERE note_name=?"; 
$statement = $connection->prepare($query); 
$statement->bind_param('sss', $new_note_name, $new_note_description, $old_note_name); 
$statement->execute(); 
+2

もしできれば、私は+1000を望む。ストリングを連結してSQL照会を停止し、プリペアドステートメントを使用します。 – Arkh

+0

あなたのPHPスクリプトの入力を信じることはできません。なぜなら、悪意のある人は自分のhtmlを書いて、必要なものを投稿できるからです。 – Frank

関連する問題