ホームページ  >  記事  >  バックエンド開発  >  PHP のインジェクション反対のアドバイス?

PHP のインジェクション反対のアドバイス?

WBOY
WBOYオリジナル
2016-06-23 14:14:29842ブラウズ

この投稿は、u010572351 によって 2013-06-27 21:10:49 に最終編集されました

現在、私が知っている SQL 攻撃は、「%」などの特殊文字を多数入力することによって実装されています。ログイン インターフェイス SQL 攻撃、

ユーザー名とパスワードに特殊文字が含まれないことはわかっていますが、特殊文字が含まれる限り、それらを直接強制終了します。

また、addlashes は通常何に使用されますか?専門家は、初心者はあまりにも知識が少なすぎるため、アンチインジェクションについてもっと情報を共有してください。

主な理由は以下のとおりです:
magic_quotes_gpc=off
magic_quotes_gpc=on
addslashes()
tripslashes()
str_replace(); ログインや検索などのエントリページではない場合、通常の dql PHP ページのステートメントは使用しないでください。インジェクションの問題を考慮してください。

ディスカッションへの返信 (解決策)

// 适用各个 PHP 版本的用法if (get_magic_quotes_gpc()) {    $lastname = stripslashes($_POST['lastname']);}else {    $lastname = $_POST['lastname'];}// 如果使用 MySQL$lastname = mysql_real_escape_string($lastname);echo $lastname; // O\'reilly$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";

// 适用各个 PHP 版本的用法if (get_magic_quotes_gpc()) {    $lastname = stripslashes($_POST['lastname']);}else {    $lastname = $_POST['lastname'];}// 如果使用 MySQL$lastname = mysql_real_escape_string($lastname);echo $lastname; // O\'reilly$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";


これは実際の開発で使いやすいですか?

使いやすいかどうかは使ってみないと分かりません。

使いやすいかどうかは使ってみないと分かりません。

上記の記述方法について 2 つの質問をしたいのですが:


1. magic_quotes_gpc をオンにすると、特殊文字を含む SQL が正常に mysql に追加され、取得するために addslashes() が必要なくなるようです。システムがすでに処理しているように見えるため、現時点ではstripslashes()は必要ありません。これは本当ですか?

if (get_magic_quotes_gpc()) {  //如果 magic_quotes_gpc开启了,则会影响 post、get、cookie 请求的数据,单/双引号、反斜杠会在前面自动加上反斜杠,因此要先用stripslashes去掉反斜杠以免出现双重转义    $lastname = stripslashes($_POST['lastname']);}else {  //否则取原数据    $lastname = $_POST['lastname'];}

if (get_magic_quotes_gpc()) {  //如果 magic_quotes_gpc开启了,则会影响 post、get、cookie 请求的数据,单/双引号、反斜杠会在前面自动加上反斜杠,因此要先用stripslashes去掉反斜杠以免出现双重转义    $lastname = stripslashes($_POST['lastname']);}else {  //否则取原数据    $lastname = $_POST['lastname'];}


よろしくお願いします。これには 2 つの意味があることがわかりました:

1. mysql で特殊文字を正常に実行できるかどうかは、エスケープに関係します。

2. mysqlで実行することは可能ですが、mysqlがインジェクションを実行するために悪意のある特殊文字が表示されます。


mysql インジェクションの場合、mysql は一部の特殊文字を認識して実行できるはずですが、悪意のある実行結果が発生していますよね。

magic_quotes_gpc スイッチ

php 5.3 ではデフォルトで閉じられています

php 5.4 ではキャンセルされました

get_magic_quotes_gpc() の戻り値を判断するのは古いことです



SQL ステートメントが標準化された方法で記述されている限り、何もありません問題。たとえば、文字列連結を使用する代わりに、置換を使用します。引用符を正しく使用してください。 PDOを使用します。

絶対的な安全は不可能です。コストと大きく関係します。

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