ホームページ  >  記事  >  バックエンド開発  >  PHP ログイン インジェクションの小さなサンプル ソリューション

PHP ログイン インジェクションの小さなサンプル ソリューション

WBOY
WBOYオリジナル
2016-06-13 13:31:081034ブラウズ

PHP ログイン インジェクションの小さな例
PHP を学習する過程で SQL インジェクションについて聞いたことがあるでしょう。簡単に言うと、バックグラウンドで SQL コードの脆弱性を利用して不正な操作を実行することです。たとえば、ログインするバックエンド コードの脆弱性を悪用すると、ユーザーは実際のユーザー名とパスワードを知らなくても、フォームからデータを送信してバックエンドに正常にログインできます。ユーザー検証の例を見てみましょう。まず、次のようにデータベースとデータ テーブルを作成し、レコードを挿入します。
CREATE TABLE `user` (
`userid` int(11) NOT NULL auto_increment,` ユーザー名` varchar(20) NOT NULL デフォルト '',
`パスワード` varchar(20) NOT NULL デフォルト '',
PRIMARY KEY (`userid`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
#
# テーブル `user`
#
INSERT INTO `user` VALUES (1, 'angel', 'mypass');
検証するコードユーザーファイルは次のとおりです:
PHP コード:
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "injection ";
mysql_connect($servername,$dbusername,$dbpassword) または die ("データベース接続に失敗しました");
$sql = "SELECT * FROM user WHERE username='$username ' AND パスワード='$パスワード '";
$result = mysql_db_query($dbname, $sql);
$userinfo = mysql_fetch_array($result);
if (empty($userinfo)){
echo "ログイン失敗" ;
} else {
echo "ログイン成功";
}
echo "

SQL クエリ:$sql

";
? >

この時点で次のように送信します:
http://127.0.0.1/injection/user.php?username=angel'or 1=1
次が返されます:
警告: mysql_fetch_array(): 指定された引数は、F:wwwinjectionuser.php の 13 行目で有効な MySQL 結果リソースではありません
ログインに失敗しました
SQL クエリ:SELECT * FROM user WHERE username='angel' or 1=1' ANDパスワード='
PHP 警告 : mysql_fetch_array(): 指定された引数は、F:wwwinjectionuser.php の 13 行目で有効な MySQL 結果リソースではありません
わかりますか?一重引用符が閉じられた後、次の一重引用符はコメントアウトされず、一重引用符が正しくペアにならないことになります。したがって、作成したステートメントでは Mysql を正しく実行できず、再構築する必要があることがわかります。 🎜>http://127.0.0.1/injection/user.php?username=angel'or '1=1
このとき、「Login Successful」と表示され、成功したことがわかります。または、次のように送信します:
http://127.0.0.1/injection/user.php?username=angel'/*
http://127.0.0.1/injection/user.php?username=angel'%23
これにより、次のステートメントがコメントアウトされます。これら 2 つの投稿の違いについて説明します。言うまでもなく、最初に投稿した文は論理演算を使用しています。 2 番目と 3 番目の文は、mysql の特性に基づいています。Mysql は、/* と # の 2 つのコメント形式をサポートしているため、送信するときに次のコードをコメントアウトします。エンコードの問題により、# を送信することに注意してください。 IE のアドレス バーは空になるため、アドレス バーで送信する場合は、# になる前に %23 を送信する必要があります。これは、PHP の論理演算よりもはるかに簡単であることがわかります。 ASP よりもはるかに強力で柔軟です。

詳細な元のアドレス: http://www.phpnewer.com/index.php/Dmaq/detail/id/202


-----解決策-- - -----------------
ふふふふふふふ
------解決策---------
共有してくれてありがとう
------解決策---------
記事は古すぎて時代遅れです。
------解決策---------
昨日公開されたばかりの記事は古いですか? ? ?


ディスカッション

記事は古すぎて時代遅れです。


------解決策------------------
これは確かに古い方法であり、次のことが可能です。これらのコメント文字と、エラーが発生したときに出力される情報を簡単にブロックします ただし、厳密に検査されていない Web サイトに対しては、この機能を試すことができます。

------解決策-----
一重引用符でフィルターで除外 他に何ができるでしょうか?
------解決策---------
これは前にも見たことがあります。 これは 1 つの GET 送信メソッドにすぎません。 POST投稿方法もあります


------解決策----------------------
この広告マンは広告を出し続けています。
------解決策----------------------
現在ブロックされている方が多いようです(笑)
------解決策------------------
幸いなことに、私は参加する決意をしています
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。