2

WPF、VB.NET アプリケーションを介して HttpOnly Cookie を読み取ろうとしています。問題のサイトは、訪問時に 2 つの Cookie を提供します。1 つは HttpOnly、もう 1 つは通常の Cookie です。

Internet Explorer を使用して、Cookie を読み取りたいサイトにアクセスします。次に、開発者ツール --> キャッシュ --> Cookie 情報を表示します。HttpOnly ではなく、通常の Cookie のみが表示されます (Chrome は両方を正しく表示します。削除して更新すると、サイトは 500 エラーを返すため、Cookie は確実に存在します)。

ここで説明されている内容に基づいて、コードを実行します: c# Get httponly cookie、次のとおりです。

Private Const INTERNET_COOKIE_HTTPONLY As Integer = &H2000

<SuppressUnmanagedCodeSecurity, SecurityCritical, DllImport("wininet.dll", EntryPoint:="InternetGetCookieExW", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Friend Shared Function InternetGetCookieEx(<[In]> Url As String, <[In]> cookieName As String, <Out> cookieData As StringBuilder, <[In], Out> ByRef pchCookieData As UInteger, flags As UInteger, reserved As IntPtr) As Boolean
End Function


<SecurityCritical()>
Public Shared Function GetCookie(url As String) As String
    Dim size As Integer = 0
    Dim sb As New StringBuilder
    If InternetGetCookieEx(url, vbNullString, Nothing, size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero) Then '<-- this always returns false
        If size <= 0 Then
            Return Nothing
        End If
        sb = New StringBuilder(size + 1)
        If Not InternetGetCookieEx(url, vbNullString, sb, size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero) Then
            Return Nothing
        End If
    End If
    Dim lastErrorCode = Marshal.GetLastWin32Error '<-- 259
    Return sb.ToString()
End Function

GetCookie("https://www.xyz.com")

上記のさまざまなバリエーションを試しましたが、結果は同じです。lastErrorCode は常に 259 に等しく、これは ERROR_NO_MORE_ITEMS に変換され、Cookie が見つからなかったことを意味します。

1) 問題のサイトは信頼済みサイト ゾーンにあるため、保護モードでは機能しません。

2) サイトは SSL の下にあります (これが何か関係があるかどうかはわかりません)。

3) これらの Cookie の場所をハード ディスクで必死に検索しましたが、役に立ちませんでした。

4) どちらもセッション Cookie です (つまり、有効期限は宣言されていません)。

5) Windows 8 x64、IE10、VS2012

これはプロジェクトのマイルストーンのほんの一部であり、数え切れないほどの時間を私にもたらしました。

やり過ぎでない限り(つまり、winpcap / fiddlercoreなど)、このCookieの値が得られたらすぐに、方法論を完全に変更したいと思っています。

4

2 に答える 2

4

ここの Q10 により、コードはトラスト ゾーンでのみ機能することに注意してください。 -internals-faq.aspxは、IE (保護モードまたは AppContainer で実行される) とアプリケーション (中程度の IL で実行される) の間で Cookie が共有されないためです。

有効な URL を関数に渡す必要があります (たとえば、ホスト名の後に少なくとも末尾のスラッシュが必要です)。無効な URL が現在機能していても、将来的には機能しなくなる可能性があります。

また、このコードでは IE の永続的な Cookie しか表示されないことにも注意してください。セッション Cookie はプロセスごとに分離されるため、アプリケーションは IE タブからのセッション Cookie を認識しません。

于 2013-08-15T22:14:55.830 に答える
1

関係するすべての人へ: エリックは完全に正しかった: セッション Cookie は処理中なので、外の世界からは事実上見えない.

有効な解決策の 1 つは、次のとおりです。 Web ブラウザー コントロールにサイトを読み込みます。投稿したコードは期待どおりに機能します。

于 2013-08-16T08:18:34.943 に答える