1. フォームデータ
はフォームデータを示します
2.php
で取得したフォームデータが自動で追加されました
3.mysql データ (一番下の行)
は mysql に書き込まれませんが、何もありません
4. mysql ソフトウェアによって隠されていると思われます:
私もそれを見つけませんでした
公式声明によると
http://www.php.net/manual/zh/function.addslashes.php
addslashes() の使用例は、データベースにデータを入力する場合です。 たとえば、O'reilly という名前をデータベースに挿入するには、エスケープする必要があります。 DBMS 固有のエスケープ関数 (MySQL の場合は mysqli_real_escape_string()、PostgreSQL の場合は pg_escape_string() など) を使用することを強くお勧めしますが、使用している DBMS にエスケープ関数がなく、特殊文字をエスケープするために使用する場合は、この機能を使います。 データをデータベースに挿入するためだけに、追加のデータは挿入されません。 PHP ディレクティブ magic_quotes_sybase が on に設定されている場合、' の挿入は ' でエスケープされることを意味します。
質問:
1. addleshes() 関数はインジェクションを防ぐためにどのようなメカニズムを使用しますか?
2. フォームで送信されたデータに対して htmlspecialchars() を直接使用しますか?
4. SQL インジェクションを防ぐ最善の方法は何ですか?
.
はフォームデータを示します
2.php
で取得したフォームデータが自動で追加されました
3.mysql データ (一番下の行)
は mysql に書き込まれませんが、何もありません
4. mysql ソフトウェアによって隠されていると思われます:
私もそれを見つけませんでした
公式声明によると
1. addleshes() 関数はインジェクションを防ぐためにどのようなメカニズムを使用しますか?質問:
2. フォームで送信されたデータに対して htmlspecialchars() を直接使用しますか?
4. SQL インジェクションを防ぐ最善の方法は何ですか?
.
ドキュメントに書かれているように、
addslashes
はパラメータの引用符の前にスラッシュを追加することです。 印刷したデータと同様に、パラメーターの前にもスラッシュがあります。 ただし、データベースにはスラッシュを含めないでください。 addslashes
がインジェクションを防ぐ方法は、SQL
を記述するときに入力パラメータを直接適用することでインジェクションできる SQL
の生成を防ぐことです。
たとえば、$sql = "SELECT * FROM user WHERE id = '$id'";
、ここの $id
パラメータが意図的に 1 に操作されている場合' OR '1 = 1'
ということは、SQL
を挿入することを意味するのではありませんか? addslashes
就是为参数的引号前加了个斜杠。
也如你所打印的数据,参数前也有斜杠。
但是数据库里就不应该有斜杠呀!addslashes
是如何防注入的,就是防止在我们写SQL
时直接套用输入参数而导致产生可被注入的SQL
来防注入的。
例如$sql = "SELECT * FROM user WHERE id = '$id'";
,如果这里的$id
参数被人故意操作成了1' OR '1 = 1'
,那不就成了注入SQL
了吗?
而如果用addslashes
加上斜杠,$id
中的引号就会被转意,也就不会产生错误的SQL
また、addslashes
を使用してスラッシュを追加すると、$id
内の引用符が解釈され、間違った SQL
が生成されなくなります。 。ただし、これらのスラッシュはデータが実際に挿入および更新されるときに変換されて戻されるため、これらの結果はデータの書き込みには影響しません。
SQL インジェクションの防止 (入力データベース):
PDO bindingParam または mysqli_stmt_bind_param: SQL インジェクションを回避します。
addslashes: すべての一重引用符、二重引用符、バックスラッシュ、および NUL をエスケープするためにバックスラッシュを使用します。
mysqli_real_escape_string: 特殊なエスケープを行います。
bind_param を使用すると、addslashes、mysqli_real_escape_string、magic_quotes_gpc を使用する必要がなくなります。
例:
あなたが言及したhtmlspecialcharsは、HTML出力時のXSS攻撃を防御するものであり、上記のSQLインジェクションに対する防御とは異なります。