1

はい、こんにちは、今日は自分のサイトのハッキングを発見しました。

ユーザー ウォール (私のコミュニティ サイト) にメッセージを書き込むと、ajax 呼び出しが実行され、メッセージがデータベースに挿入され、成功するとスライドして表示されます。

問題なく正常に動作します。

だから私は少し考え直していました.これにはPOSTメソッドを使用しています.GETメソッドなら?msg=haxmsg&usr=12345679を簡単に実行できます. しかし、POST メソッドを回避するにはどうすればよいでしょうか?

私は新しいhtmlドキュメントを作成し、フォームを作成し、アクションで「site.com/insertwall.php」(通常はajaxで使用されているファイル)を設定し、私が行っているのとまったく同じ名前の入力フィールドをいくつか作成しましたajaxcall (msg, uID (userid), BuID (by userid) ) で送信ボタンを作りました。

ログインが必要な page_protect() 関数があることは知っています。そうでない場合は、index.php のヘッダーになります。だから私はログインし(私のsite.comでセッションを開始しました)、次にこの送信ボタンを押しました。そして、それが新しいメッセージを作成したことを私のサイトで見ました。

POSTメソッドをハイジャックするのはとても簡単だったので、もう少し安全か何かだと思いました。

このハイジャックを防ぐために何ができるか知りたいですか? 本当のハッカーがこの「穴」で何ができるか知りたくないからです。page_protect は、セッションが同じ http ユーザー エージェントからのものであることを保証します。これは正常に機能します (ログインせずにフォームを実行しようとすると、ヘッダーが startpage に表示されるだけです)。最初にそれを実行します。

どんなアドバイスも大歓迎です。私は ajax 呼び出しを可能な限り安全に保ちたいと思っており、それらはすべて POST メソッドで実行されています。サーバーまたは何かからのものであることを確認するために、insertwall.phpに何ができますか..

ありがとうございました

4

2 に答える 2

4

この脆弱性は、クロス サイト リクエスト フォージェリ (CSRF) と呼ばれます。フォームにランダムなトークン値を追加する必要があります (入力は非表示)。

$_SESSION['token'] = md5(rand()); //example
//ur code
if($_SESSION["token"] != $_POST["token"]){
    echo 'Invalid Request!';
}
else{
    //action
}

于 2010-12-25T23:21:40.920 に答える
1

あなたのコメントに基づいて…</p>

サーバーの外にあるものはすべて、あなたの管理外です。ブラウザではなく、サーバーの境界で何を許可するかを定義する必要があります。

したがって、たとえば、人々がメッセージを送信できるようにしたい場合は、課したい制限 (ログインしているユーザーのみ、友人のみ、月が満ちているときのみなど) をサーバーに課す必要があります。

ブラウザーに送信するものは、API と対話するアプリケーションと考えることができます。人々が予期しない方法で API と対話する可能性がありますが、すべてのセキュリティがサーバーによって管理されていれば安全です。

(中間者の話題になるまでは、CSRF 防止と SSL による暗号化を検討してください)

于 2010-12-25T21:00:31.887 に答える