2

json_encode()関数が自動的にバックスラッシュ"'値を付けることに気付きました。mysqli_real_escape_string($con, $value)私は元々 、文字列が配列に入れられる前に使用することで SQL インジェクションから保護していました。その後、jSON を使用してエンコードされます。

json_encode追加のバックスラッシュを追加するため、関数を使用する必要がありますmysqli_real_escape_stringか?

4

4 に答える 4

4

はい、それはまだ必要です。json_encodeJSON内に含まれる文字列に円記号を追加しますが、JSON自体の制御要素には追加しません。

したがって、この:

array( 'key' => 'some "value" here' );

になる:

{"key": "some \"value\" here"}

文字列にはまだエスケープされていない引用符があります(キーと値を囲む引用符はjson_encodeSQLインジェクションから保護するためのものではありません。JSON用に純粋にスラッシュを追加するため、後でjson_decode()データを取得するときにわかります。文字列が開始および停止する場所。

他の人が言っているように-準備されたステートメントを使用してください。限目。すでにmysqliを使用している場合は、使用しない理由はありません。

于 2013-03-10T18:01:53.353 に答える
3

mysqliを使用している場合は、PreparedStatementsを使用するだけで完了です。

于 2013-03-10T18:02:24.767 に答える
2

json_encode()もmysqli_real_escape_string()もSQLインジェクションから保護しません。

さらに、jsonでエンコードされた値でmysqli_real_escape_string()を使用しない場合、それらをデコードして戻すことはできません。

また、データベースにjsonを保存している場合は、データベース構造が間違っています。

データベースを使用しているテーブルは、そのような配列です。それらは、セルにスカラー値を格納することを目的としています。

于 2013-03-10T18:05:31.350 に答える
1

json_encodeXSSまたはSQLエラーの生成に対する保護が不十分です。オブジェクトをJSONとしてエンコードするという行為は、新しい引用文字を追加することさえあります。

mysqli_real_escape_string…ただし、使用しないでください。プリペアドステートメントとパラメータ化されたクエリを使用してください。

…そして一般的に、JSONをデータベースに保存するべきではありません。データを正規化して、クエリできるようにします。

于 2013-03-10T18:02:54.787 に答える