登録ユーザーが(有効なパスワードを使用して)ログインし、ユーザーIDに基づいてセッションをセットアップできるphpサイトがあります。しかし、私はこれがハイジャックされていると確信しており、そこに置いていないサーバー上に「新しい」ファイルを見つけました。私のサイトでは、SQL インジェクションと XSS のすべてのユーザー入力をクリーンアップしていますが、これは引き続き発生します。これを解決する方法について何かアイデアを持っている人はいますか?
3 に答える
セッション Cookie のハイジャックにより、攻撃者がサーバー上に新しいファイルを作成することはできません。それができることは、認証されたユーザーのセッションへのアクセスを与えることだけです。サイトのウェブルートに任意のファイルをアップロードできるようにするのは、コードやサーバーの構成次第です。
リモート侵害のヒットを確認するには、疑わしいファイル (searches.php、7.php.jpg) などのファイル作成時刻を取得し、サーバーのログをくまなく調べて、その頃に何が起こっていたかを確認します。ヒットの残りの部分と一緒にセッション ID をログに記録している場合、セッションの有効期間中に 2 つ以上の異なる IP から使用されるため、セッションがハイジャックされたかどうかを簡単に確認できます。元のユーザーが 1 つの ISP からログインした後、突然まったく別の ISP にジャンプしたように見えた場合は特に明らかです。
そしてもちろん、あなたのセッションはどのように実装されていますか? クッキー?PHP trans_sid (非表示のフォーム フィールドとクエリ文字列でセッションを渡す)? trans_sid は、サイトへのリンクを共有するだけでもセッション ID が送信されるため、ハイジャックに対して特に脆弱です。また、サイト上のすべての外部リンクは、HTTP リファラーにセッション ID を表示します。
PHP の専門家が思いついた解決策は、フォームを送信するたびに一意のキー/トークンを使用することです。このアイデアについては、ここ net-tutes を参照してください。
PHP Security Guide を確認することを忘れないでください。. XSS、フォーム スプーフィング、SQL インジェクション、セッション ハイジャック、セッション固定などのトピックをカバーしています。
クエリでは常に適切なデータ型を使用してください。たとえば、数値の前にint
or関数を使用し、文字列値には関数を使用してください。例:intval
mysql_real_escape_string
$my_num = (int) $_POST['some_number'];
$my_string = mysql_real_escape_string($_POST['some_string']);
クエリに prepend ステートメントを使用することもできます。
PHP アプリケーションを保護する人気のあるプロジェクト:
前に言っておきますが、あなたの「クッキー」は簡単に推測できます。
一部のサイトでは、ユーザーがログに記録するときに Cookie を作成するだけで、認証コードは Cookie の存在を確認するだけです。
ここで、サイトに登録してログインし、Cookie を開いて、ユーザー ID を保存しているだけであることに気付いた場合、他のユーザー ID の値を操作して、ほら!
あなたはアイデアを得る。