0

Python http.client を使用して、ローカルの TWiki インストールにアクセスしようとしています。何らかの理由で、私はいつも 403 Forbidden になります。サーバー内の他のサブフォルダーにはアクセスできますが、twiki にはアクセスできません。curl でこの TWiki ページにアクセスできます。python http.client で /bin/ または /cgi-bin/ フォルダーにアクセスするときに何か特別なことをする必要がありますか?

私のローカルホストは外部からアクセスできないため、twiki.org ページの例を次に示します。

>>> import httplib
>>> conn = httplib.HTTPConnection("twiki.org")
>>> conn.request("GET", "/cgi-bin/view/")
>>> r1 = conn.getresponse()
>>> print r1.status, r1.reason
403 Forbidden
>>> data1 = r1.read()
>>> data1
'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">\n<html><head>\n<title>403 Forbidden</title>\n</head><body>\n<h1>Forbidden</h1>\n<p>You don\'t have permission to access /cgi-bin/view/\non this server.</p>\n<hr>\n<address>Apache/2.2.3 (CentOS) Server at twiki.org Port 80</address>\n</body></html>\n'
>>> 
4

1 に答える 1

1

私はこれを自分で試してみましたが、User-Agentヘッダーを設定すると修正されるように見えることがわかりました。ヘッダーが何であるかは問題ではないようで、単に設定されているだけです:

>>> import httplib
>>> conn = httplib.HTTPConnection("twiki.org")
>>> conn.request("GET", "/cgi-bin/view/", headers={"User-Agent": "foo"})
>>> r1 = conn.getresponse()
>>> print r1.status, r1.reason
200 OK

残念ながら、Twiki がUser-Agentヘッダーなしで 403 を返す理由を明らかにすることはできません。これは、クライアント間の違いの可能性があるという理由で試してみただけです。サイトのモバイル版を返すかどうかを判断しようとしているようなものだと思いますが、ヘッダーがない場合を適切に処理しないのは本当に貧弱です。

ただし、少なくとも回避策が提供されることを願っています。

編集

どうやらこれは、ディレクティブを使用して環境変数を設定するデフォルトのApache構成の一部であり、おそらく後で取得されて、観察された応答を返します。BrowserMatchNoCaseblockAccess403 Forbidden

彼らはこれで DoS 攻撃を何とか防げると考えているようですが、私は単純にランダムなUser-Agent文字列を設定するだけで回避できるとは確信が持てません。その構成からわかるように、ブロックしようとする「既知の悪い」ユーザー エージェントのリストもあります。コマンドラインからフェッチするためにそれらのいずれかを使用しようとすることで、これを確認できます。

$ GET -Ssed -H "User-Agent: some-random-name" http://twiki.org/cgi-bin/view/
GET http://twiki.org/cgi-bin/view/
200 OK
[...]
$ GET -Ssed -H "User-Agent: FAST" http://twiki.org/cgi-bin/view/
GET http://twiki.org/cgi-bin/view/
403 Forbidden
[...]

彼らにはこれを行う理由があると確信していますが、私は感銘を受けていないと言わざるを得ません.

于 2013-05-27T23:02:43.090 に答える