問題タブ [session-fixation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
session - セキュリティ SessionFixationProtectionStrategy がセッション スコープの Bean に干渉している
Spring 3.1.1.Release、Security 3.1.0.Release を使用しています。
Web アプリにログイン/ログアウトを追加しましたが、セッション スコープ Bean が以前のように機能していません。Bean は、CMSConnector と呼ばれる CMS に接続するために使用されます。
ユーザーを認証するために、AuthenticationProvider を実装し、authenticate() 呼び出しで、セッション スコープの CMSConnector を取得し、CMSConnector.login() を呼び出します。CMS ログインに失敗すると、ログインに失敗します。
問題 -
ログインが成功すると、ログインが成功した直後に @predestroy logout() が呼び出されます。その後、SessionFixationProtectionStrategy が前のセッションの無効化を呼び出し、新しいセッションを割り当てていることがわかりました。
invalidate() は、セッション スコープの Bean で @predestroy メソッドを呼び出しています。
そのため、接続を閉じずに @predestroy アノテーションを一時的に削除しました。(非常に悪い習慣です。)
問題を解決するための回避策は何ですか?
@PostConstruct を作成してそこにログイン プロセスを配置しようとしましたが、request.getSession(true) が呼び出されたときに @PostConstruct が呼び出されません。
ありがとう!
ジェイソン
php - セッションをデータベースに保存すると、ハイジャック/修正が防止されますか
何時間もの欲求不満の後、私はなんとかPHPセッションをデータベースに保存するスクリプトを書くことができました。私の質問は、これはセッションのハイジャックや固定を防ぐのでしょうか?
前もって感謝します。
ruby - ruby sinatra でのセッション固定の防止
ruby におけるセッション固定のトピックのほとんどは、主に Rails に関連しています。sinatra にセッション固定の脆弱性はありますか? Rails では、セッションを割り当てる前に reset_session を実行することをお勧めします。sinatra でセッション固定を防ぐにはどうすればよいですか?
jboss - Spring の SessionFixationProtectionStrategy は JBoss / Weld の下で CDI Conversation を強制終了します
@ConversationScoped としてマークされ、ウィザードの多くのステップ間で使用されるオブジェクトがあります。
これは、私のユーザーがログインしているときに、Spring の SessionFixationProtectionStrategy が session.invalidate() メソッドを呼び出して、新しい ID で新しいセッションを再作成することを除いて、完全に機能します。次に、無効化されたセッションの属性を新しいセッションに再アタッチします。
問題は、sessionDestroyed イベントにバインドされ、HttpSession オブジェクトにバインドされた @ConversationScoped インスタンスを強制終了する WeldListener インスタンスがあることです。
私は SessionFixationProtectionStrategy を無効にし、現在何もしない NullAuthenticatedSessionStrategy を使用していますが、これからも自分のサイトを保護するためにセッション固定戦略を維持したいと考えています。
これを回避する方法について何か提案はありますか?
ruby-on-rails - Authlogicを使用してreset_sessionを呼び出すRails3
RoRセキュリティガイドには、セッション固定に対抗するためにreset_sessionメソッドを使用して、「新しいセッションIDを発行し、ログインが成功した後に古いIDを無効と宣言する」必要があると記載されています。
Authlogicを使用しているときにreset_sessionを呼び出すためのガイダンスを見つけることができませんでした。それは単にコントローラーメソッドにメソッドを含める場合ですか(以下のように)?
reset_sessionを呼び出す前に、セッションハッシュにuser_credentialsとuser_credentials_idの両方のキーと値が表示されるため、Authlogicで問題が発生することを懸念しています。
jsf - フィルタとラッパーを使用せずにURLのJSESSIONIDを削除する
/*のurl-patternでリスニングを作成しました。これは、を実装Filter
に置き換えます。HttpServletRequest
HttpServletRequestWrapper
私はを持ってServlet
おり、これはWebサーバーからフェッチする画像をレンダリングするためServlet
に使用しています。h:graphicImage
Apache
<h:graphicImage value="/locationInMyWebServer/myImage.jgp"></h:graphicImage>
このページ(画像を含む)にアクセスするためのURLにアクセスするJSESSIONID
と、画像名に追加された画像が表示されませんでした。形成されていたURLは以下のようになりました。
http:/myDomain/myServlet/../myImage.jpg;JSESSIONID=ABCDEFGHIJKLMM
したがって、質問の冒頭で述べたようにFilter
(このフィルターの詳細はこちら)を使用しました。
これからServlet
ログインするためのリンクがあります。ユーザーがログインすると、JSESSIONID
認証後も同じことが保持されます。ログイン前とユーザーログイン後のセッションIDは同じであるため、これがセッション固定攻撃につながります。
JSESSIONID
このフィルターの使用を回避し、使用時に画像に追加される問題を解決するにはどうすればよいですか?h:graphicImage
PS:私の中に<img src>
いるので使用できませんh:graphicImage
h:commandLink
ログイン前とログイン後、これを使用する前のセッションIDが異なっていたFilter
以下に関連するコードを追加しました。
以下のコードはweb.xml
、Filter
私のコードURLSessionFilter
は以下の通りです、
サーブレットには、クリックするとログインページが表示されるリンクがあります。コードは以下のとおりです、
で、いくつmyBean.myMethod
かのDBクリーンアップアクティビティを実行し、ログインページにリダイレクトしています。
php - セッションの再生成がスプーフィングを防ぐための解決策ではないのはなぜですか?
セッションを何時間も読んで理解しようとした後、これが私の一般的な結論/見解です。
単純な (そして現実的な) 状況:
- 攻撃者は既存の Web サイト「website.example.com」を取得し、URL「9gag.com/?SID=1234」の背後にランダムな SID を挿入します。
- 攻撃者は、この URL を「フォーラム」に次のテキストとともに貼り付けます。
- 被害者は Web サイトを認識し、そこにアカウントを持っているため、指定された URL をすばやくクリックします。
- 被害者はサイトにアクセスしてログインします。
被害者は「9gag.com/?SID=1234」をクリックしてログインしたため、彼は現在、id=1234 のセッションにログインしています。すべてのセッションには一意の ID があることに注意してください。これは、サーバーが各セッションを個別に処理するために必要です。ただし、複数のコンピューターから同時に同じセッション (同じ ID を持つ) に参加することは可能です。
- 攻撃者は「9gag.com/?SID=1234」にもアクセスします。彼は現在、被害者と同じセッションに参加しています。これは、被害者としてログインしていることを意味します。彼はすべての被害者のアカウント設定を表示し、それらを変更できます。
これを防ぐために、このサイトのホストは次の PHP コードを使用できます。
Initiated が true の場合 (つまり、ランダムな sessionID が生成された場合)、新しい sessionID は生成されません。それ以外の場合は、新しい sessionID を生成します。そのため、被害者が特定のセッション ID '1234' でログインすると、それを破棄して新しいものを生成します。攻撃者はそれを知らないため、あなたと同じセッション ID を取得できません。
攻撃者は賢く、別の方法を知っています。
- 攻撃者はサイトにアクセスしてログインします。PHP サーバーから新しいセッション ID が生成されています。
- 攻撃者は自分の COOKIES を調べて、受け取ったセッション ID を確認します。彼は SID='412e11d5' を見つけました
- 攻撃者は以前と同じ手順を実行しますが、「1234」の代わりに指定された ID を使用します。-> '9gag.com/?SID=412e11d5'
質問: これはどのように可能ですか?:
- $_SESSION['initiated'] は指定された ID に基づいていますか? ID「412e11d5」のセッションを使用するため、「initiated == true」ですか?
- 攻撃者が最初にセッションを作成しました。それ以外の場合、ID を生成できませんでした。では、被害者は、その逆ではなく、(アカウント設定で) 攻撃者のセッションに参加するべきではないでしょうか?
- セッションの固定は、多くの不運に基づいているようです。攻撃者は、被害者と同時に Web サイトにアクセスする必要があります。私はこれがどのように機能するのか理解していないと思います..
編集: クロスサイト クッキングを使用した攻撃:
- 攻撃者は、既存の Web サイト「9gag.com」の COOKIE に特定のセッション ID を格納する独自の Web サイト「evil.example.com」を作成します。
- 被害者は、他の例と同様に「evil.example.com」という URL をクリックします。「9gag.com」の COOKIE にセッション ID が保存されています。
- 被害者はその日のうちに「9gag.com」にログインします。
- 攻撃者は、固定されたセッション識別子を使用して被害者のアカウントを使用できるようになりました。
質問: 繰り返しますが、これはどのように可能ですか?:
- 攻撃者が別の Web サイトの COOKIE に何かを保存できる場合でも。どのように/いつ被害者と同じセッションに参加できますか? 同時にログインする必要はないようですか?それとも、別の方法で (セッション ID を使用して) 被害者の個人データを取得できますか?
私の部分からの誤解を修正してください!前もって感謝します。
php - セッション固定に関するこれらの例はどういう意味ですか?
最初の例
2番目の例
唯一の違いは、2 つの異なる URL (例: http//localhost/test?PHPSESSID=123; http://localhost/test?PHPSESSID=456) を使用する場合です。最初のスクリプトはゼロから再びカウントアップしますが、秒はカウントを続けます
では、2 つの例は何を意味するのでしょうか。そして、それは私に何を伝えたいですか?
php - セッションの固定、register_globals オフの問題はまだありますか?
PHP セキュリティに関するいくつかの記事を読んでいて、この記事に出くわしました:
http://shiflett.org/articles/session-fixation
この記事では、URL リクエストで PHPSESSID 変数を渡すことにより、セッションを簡単に修正できることを説明しています (例: ?PHPSESSID=1234
)。ただし、 php.ini でが に設定されている場合、PHP はとを異なるタイプの変数として扱い$_GET
、URL リクエストで使用してもこの問題は発生しないことを理解しています (間違っている場合は修正してください) 。$_SESSION
$GLOBALS
register_globals
off
?PHPSESSID=1234
次のスクリプトをテストしました。
しかし、サーバー上でセッションの固定を再現できないようです.php.iniでregister_globals
設定したためだと思いoff
ました。
私はこれについて間違っていますか?
確実に知ることが重要なようです。