json_encode()
関数が自動的にバックスラッシュ"
と'
値を付けることに気付きました。mysqli_real_escape_string($con, $value)
私は元々 、文字列が配列に入れられる前に使用することで SQL インジェクションから保護していました。その後、jSON を使用してエンコードされます。
json_encode
追加のバックスラッシュを追加するため、関数を使用する必要がありますmysqli_real_escape_string
か?
json_encode()
関数が自動的にバックスラッシュ"
と'
値を付けることに気付きました。mysqli_real_escape_string($con, $value)
私は元々 、文字列が配列に入れられる前に使用することで SQL インジェクションから保護していました。その後、jSON を使用してエンコードされます。
json_encode
追加のバックスラッシュを追加するため、関数を使用する必要がありますmysqli_real_escape_string
か?
はい、それはまだ必要です。json_encode
JSON内に含まれる文字列に円記号を追加しますが、JSON自体の制御要素には追加しません。
したがって、この:
array( 'key' => 'some "value" here' );
になる:
{"key": "some \"value\" here"}
文字列にはまだエスケープされていない引用符があります(キーと値を囲む引用符はjson_encode
SQLインジェクションから保護するためのものではありません。JSON用に純粋にスラッシュを追加するため、後でjson_decode()
データを取得するときにわかります。文字列が開始および停止する場所。
他の人が言っているように-準備されたステートメントを使用してください。限目。すでにmysqliを使用している場合は、使用しない理由はありません。
mysqliを使用している場合は、PreparedStatementsを使用するだけで完了です。
json_encode()もmysqli_real_escape_string()もSQLインジェクションから保護しません。
さらに、jsonでエンコードされた値でmysqli_real_escape_string()を使用しない場合、それらをデコードして戻すことはできません。
また、データベースにjsonを保存している場合は、データベース構造が間違っています。
データベースを使用しているテーブルは、そのような配列です。それらは、セルにスカラー値を格納することを目的としています。
json_encode
XSSまたはSQLエラーの生成に対する保護が不十分です。オブジェクトをJSONとしてエンコードするという行為は、新しい引用文字を追加することさえあります。
mysqli_real_escape_string
…ただし、使用しないでください。プリペアドステートメントとパラメータ化されたクエリを使用してください。
…そして一般的に、JSONをデータベースに保存するべきではありません。データを正規化して、クエリできるようにします。