ホームページ  >  記事  >  バックエンド開発  >  addslashes() の目的と、php での mysql インジェクションを防ぐ方法は何ですか?

addslashes() の目的と、php での mysql インジェクションを防ぐ方法は何ですか?

WBOY
WBOYオリジナル
2016-08-04 09:21:111395ブラウズ

1. フォームデータ
addslashes() の目的と、php での mysql インジェクションを防ぐ方法は何ですか?
はフォームデータを示します

2.php
addslashes() の目的と、php での mysql インジェクションを防ぐ方法は何ですか?
で取得したフォームデータが自動で追加されました

3.mysql データ (一番下の行)
addslashes() の目的と、php での mysql インジェクションを防ぐ方法は何ですか?
は mysql に書き込まれませんが、何もありません

4. mysql ソフトウェアによって隠されていると思われます:
addslashes() の目的と、php での 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 インジェクションを防ぐ最善の方法は何ですか?
.

返信内容:

1. フォームデータ


はフォームデータを示しますaddslashes() の目的と、php での mysql インジェクションを防ぐ方法は何ですか?
2.php


で取得したフォームデータが自動で追加されましたaddslashes() の目的と、php での mysql インジェクションを防ぐ方法は何ですか?
3.mysql データ (一番下の行)


は mysql に書き込まれませんが、何もありませんaddslashes() の目的と、php での mysql インジェクションを防ぐ方法は何ですか?
4. mysql ソフトウェアによって隠されていると思われます:


私もそれを見つけませんでしたaddslashes() の目的と、php での 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 インジェクションを防ぐ最善の方法は何ですか?
.

ドキュメントに書かれているように、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インジェクションに対する防御とは異なります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:phpreaddir次の記事:phpreaddir