2012-04-03 5 views
2

私はハッカーから、セッションのハイジャックを利用して自分のサイトをダウンさせると連絡を受け、彼のテキストボックスがセッションのハイジャック攻撃を受けていると言っています。セッションのハイジャックを中止する

セッションハイジャックからテキストボックスを保護するためにとにかくあります 私はこれをエスケープし、SQLインジェクションから保護するためにこれを使用しています。ここで

は、ここではその後、私のフォーム

 <form name="hide" action="hideboxupdate.php" method="post"> 
      <input type="radio" name="yes" value="1" /> 
    Yes<br /> 
    <input type="radio" name="no" value="0" /> 
    No 
    <input name="submit" type="submit" value="Submit" /> 
     </form> 

である私のhideboxupdate.php

<?php 

$yes= mysql_real_escape_string($_POST['yes']); 
$yes2 = strip_tags($yes); 




$no= mysql_real_escape_string($_POST['no']); 
$no2 = strip_tags($no); 
?> 
      <?php 

      if (isset($yes2)) { 





    $result3333 = mysql_query("UPDATE users SET hide_box='1' WHERE username = '".$_SESSION['username']."'") 
or die(mysql_error()); 

echo "Users now can not see your user box"; 
} 

if (isset($no2)) { 


$result3333 = mysql_query("UPDATE users SET hide_box='0' WHERE username = '".$_SESSION['username']."'") 
or die(mysql_error()); 

echo "Users can now see your box on your profile"; 

} 
?> 

は、セッションハイジャックから保護するために、とにかくそこにされています?

+0

はい、この関連の質問読み: をhttp://stackoverflow.com/questions/6483092/php-session-hijacking [PHPのセッションセキュリティ]の – joelparkerhenderson

+0

可能複製(http://stackoverflow.com/q/328 /)、[セッションのハイジャックを防ぐための最良の方法は何ですか?](0120-18753) – outis

答えて

5

セッションのmd5を作成し、ブラウザのデータとipをデータベースに入れ、すべてのページで負荷チェックを行います。

+0

+1これはかなり良い解決策です。 –

+0

ありがとうございますこれを試してください。 – user1152332

+1

私は、セッション用の新しいテーブルを作成し、ユーザーIDなどにバインドし、更新タイムスタンプを追加し、古いセッションを削除します(これはダブルログインを防止する良い方法です) – MakuraYami

0

キャプチャ保護をインストールすることで、システムに「書き込み」する要求を保護することを検討してください。

私は Google reCaptchaを使用して、それはかなり良いことだ

...また

では、システム(例えば、ログインフォーム)への認証後にPHPSESSIDをresetingていることを確認してください:session-regenerate-id

+0

私はcaptchaを使用して、セッションの再生成 - id " – user1152332

+0

リセットの背後にあるアイデアは、ログインが成功した後にセッションを強制的に変更するということです。ご存じのように、セッションファイルはセッションの無効化後に自動的に削除されず、ハッカーがシステムへの特権アクセスを取得するために使用することができます。この方法で、あなたは**現在のID **を**新しいIDでリセットする必要があることを具体的に要求します** - 私は古いセッションが自動的に削除されると信じています。 –

3

ページを送信するとき

<input type="hidden" name="csrf" value="0432985732409857243"/> 

使用:フォームで、あなたはまた、データベース内のユーザーのレコードに書き込みをランダムな文字列で、このような何かを隠し入力を含みますrフォームを送信すると、フォームの非表示データcsrfがデータベースに格納されている値と一致することを確認します。 csrfが一致すると、更新が正常であり、csrfも削除されていることを意味します。 csrfが一致しない場合は、更新を行いません。

これは、フォームを送信できるのは1回だけであるため、ユーザーを保護します。

+0

firebugを使ってこの値を見ることができます... – user1152332

+0

firebugは、自分のページの読み込みのためにユーザーに値を表示しますが、その値はほかの誰かの値とは異なります。 – joelparkerhenderson

2

これはあなたのコードが攻撃されることを防ぎません。人は自分のローカルホストにフォームを作成し、使用するのと同じ変数名でサーバーにポストするだけで、任意のデータをフォームに投稿できます。

これは1つのケースです。ホワイトリストアプローチを使用してください。サーバー側では、正しい入力であると予想されるフォーム内の各変数のすべての可能な値を含む配列を作成します(<input>,<textarea>では明らかに不可能です)。

また、ユーザーはセッション固定について話しているので...各ログアウト後にセッションを破棄します。ログイン後にsession_regenarate_idを使用します(md5 + salt暗号化を使用)。 URLにsession_idを伝播しないでください。

いくつかのポインタ:(Chris Shiflett著...Renowedウェブセキュリティエキスパート)

http://shiflett.org/articles/session-hijacking

http://shiflett.org/articles/session-fixation

http://shiflett.org/articles/foiling-cross-site-attacks

http://shiflett.org/articles/the-truth-about-sessions

http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string

はそれが役に立てば幸い...

0

サーバーとクライアントは、しばしばSSLであるログインフェーズを実行するか、クライアントとサーバーが一意の共有ソルト値(ユーザーパスワードなど)を形成できるように、サーバーが他の顧客データを利用できることを考慮してください。非SSLログインでさえ、パスワード自体のパスワードではなく、ログインのためにパスワードのハッシュ化されたハッシュのみを送信する必要があります。サーバはその応答でカウントを送信し始め、クライアントは次のページリクエストで(カウント+プライベートソルト)のハッシュで応答することができます。潜在的なセッションハイジャッカーは、このプライベートソルトを取得する方法を持たないため、シーケンス内で次のハッシュを生成することはできません。