1

現在、Web アプリケーションの侵入テストを行っているところ、興味深い現象に遭遇しました。テスト セッション中に、プロキシを使用して URL を収集しました。匿名アクセスの URL リストをテストしたかったので、この小さなツールを作成しました。

    public static void main(String[] args) {
    try {
        TrustAllCerts.disableCertChecks();
        FileReader fr = new FileReader(new File("urls.txt"));
        BufferedReader br = new BufferedReader(fr);

        String urlStr = br.readLine();
        while (urlStr != null) {
            if (urlStr.trim().length() > 0) {
                URL url = new URL(urlStr);

                HttpsURLConnection urlc = (HttpsURLConnection) url.openConnection();
                urlc.connect();
                if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    System.out.println(urlStr);

                } else {
                    System.out.println("["+urlc.getResponseCode()+"] "+urlStr);
                }
                urlc.disconnect();
            }
            urlStr = br.readLine();
        }
        br.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

基本的には何もしませんが、指定された URL で URL 接続を開き、HTTP 応答コードをテストします (実際には、ログイン ページにリダイレクトされる場合は、さらにいくつかのテストを実装しました)。ただし、問題は、この特定のアプリケーション (一部のカスタム MS SQL Server Reporting Services) が NTLM WWW 認証を使用するように構成されていることです。Firefox を使用していくつかの URL にアクセスしようとすると、401 Unauthorized + login dlg が表示されます。Internet Exploder はバックグラウンドで NTLM 認証を実行し、アクセスを許可します。Java URLConnection (または URL) クラスが同じことをしているようです。なぜなら、私は 401 を取得していないからです。Java で暗黙的な NTLM 認証を無効にする方法はありますか? これは私にとって悪い落とし穴です。

4

2 に答える 2

1

Java Network Documentationが最良のリソースだと思います。を設定すると、http.auth.preference="basic"必要なものが得られます。ダイジェストなどは必要ないと仮定します。それを超えてNTLMを無効にできるかどうかはわかりません。

考慮すべきもう 1 つのことは、Apache や Google などの他の Java HTTP クライアント実装です。

于 2012-05-25T08:11:34.400 に答える
0

これが役立つかどうかはわかりませんが、逆に困惑しています。

NTLM 認証を実行したかっので、ローカル マシンで CNTLM という無料アプリを使用しました。これは、着信要求を転送 (および NT 認証) するローカル プロキシ サーバーです。NTLM プロキシを使用できないアプリに適しています。

申し訳ありませんが、これがあなたの質問に答えていないことはわかっていますが、誰かの役に立つかもしれません! :)

于 2012-05-25T08:15:06.970 に答える