0

POST を使用して S3 への直接アップロードを実行するときに (csrf で) 問題が発生しています。

コードは次のとおりです。

<form action="https://mymediaurl/" method="post" enctype="multipart/form-data">
    <input type="hidden" name="key" value="uploads/${filename}">
    <input type="hidden" name="AWSAccessKeyId" value="{{ access_key }}">
    <input type="hidden" name="acl" value="private">
    <input type="hidden" name="success_action_redirect" value="http://localhost/">
    <input type="hidden" name="policy" value="{{ policy }}">
    <input type="hidden" name="signature" value="{{ signature }}">
    <input type="hidden" name="Content-Type" value="image/jpeg">
    <!-- Include any additional input fields here -->

    File to upload to S3:
    <input name="file" type="file">
    <br>
    <input type="submit" value="Upload File to S3">
</form>

エラーは次のとおりです。

<Code>AccessDenied</Code>
<Message>
    Invalid according to Policy: Extra input fields: csrfmiddlewaretoken
</Message>

csfr を含むソース コード:

<form action="https://mymediaurl/" method="post" enctype="multipart/form-data">
    <div style='display:none;'><input type='hidden' id='csrfmiddlewaretoken' name='csrfmiddlewaretoken' value='123412341234' /></div>
    <div style='display:none;'><input type='hidden' id='csrfmiddlewaretoken' name='csrfmiddlewaretoken' value='123412341234' /></div>
    <input type="hidden" name="key" value="uploads/${filename}">
    <input type="hidden" name="AWSAccessKeyId" value="ASFDFDSF">
    <input type="hidden" name="acl" value="private">
    <input type="hidden" name="success_action_redirect" value="http://localhost/">
    <input type="hidden" name="policy" value="asdhfkajewhlfawe">
    <input type="hidden" name="signature" value="asdfasdfasdf">
    <input type="hidden" name="Content-Type" value="image/jpeg">
    <!-- Include any additional input fields here -->

    File to upload to S3:
    <input name="file" type="file">
    <br>
    <input type="submit" value="Upload File to S3">
</form>

ポリシー ドキュメントに csrfmiddlewaretoken を追加しようとしましたが、うまくいきません。誰かがこの問題に遭遇し、解決策を見つけましたか? 高低を検索しましたが、この特定の問題に対する答えが見つからないようです。

問題があれば、このプロジェクトで Django 1.3.1 を実行します。

4

1 に答える 1

0

クリストファーのコメントの助けを借りて、自分の質問に答えます。

これが私のポリシー ドキュメントです。

{"expiration": "2014-01-01T00:00:00Z",
"conditions": [
    {"bucket": "media.somehost.com"},
    ["starts-with", "$key", "uploads/"],
    ["starts-with", "$csrfmiddlewaretoken", ""],
    {"acl": "private"},
    {"success_action_redirect": "http://localhost/"},
    ["starts-with", "$Content-Type", ""],
    ["content-length-range", 0, 1048576]
]

csrfmiddlewaretokenを正しい形式でポリシーに追加する必要がありました。

于 2012-09-04T14:16:45.170 に答える