2016-11-25 2 views
0

( "、?、スクリプト、またはいくつかのsqlタグなどの)シンボルにそのテキストが含まれていると、私のサイトからテキストを追加する際に問題があります。テーブルに挿入するときにシンボルを使用できない

ここで

コードの少しは、あるこれは十分にあると思います:)

if(isset($_POST['submit_achievement'])){ 
    $title = $_POST['title_field']; 
    $description = $_POST['description_field']; 
    $sql2 = 'INSERT INTO achievements (title,description) VALUES (' . '"' .$title . '"'. "," . '"' . $description . '"' . ')'; 
    $records2 = mysqli_query($conn,$sql2); 
} 

あなたは私のコードから任意のより多くの行が必要な場合は、単に書き込み、どうもありがとう!:)

+1

は、[PHPでSQLインジェクションを防止するにはどうしたらいいですか?](http://stackoverflow.com/a/60496/689579)を読むのに最適な時期です。準備されたステートメントとパラメータ化されたクエリ(選択された回答の例2を参照)を使用する方法を学ぶことで、エラーを修正するのに役立ちます。 – Sean

+0

SQLインジェクション攻撃に対して広く開かれている –

+1

[PHPでSQLインジェクションを防止するにはどうすればいいですか?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php ) – chris85

答えて

1

問題はここにあります準備された文を使用しておらず、適切にエスケープしていないので、いくつかのシンボルがSQLと競合します。 SQL injection bugsに脆弱です。この問題を解決するためにparameterized queriesbind_paramを使用する

スイッチ:注意点としては

$stmt = mysqli_prepare($conn, "INSERT INTO achievements (title, description) VALUES (?,?)"); 

$stmt->bind_param("ss", $_POST['title_field'], $_POST['description_field']); 

_fieldような名前で冗長なものを入れないようにしてください。フォーム提出の場合はフィールドと推定されます。

関連する問題