38

HTMLページのフォームなど、マルチパートリクエストを予期するcgiスクリプトにファイルをアップロードするスクリプトを書いています。はboundary、リクエスト本文のファイルの内容に注釈を付ける一意のトークンです。ボディの例を次に示します。

--BOUNDARY
Content-Disposition: form-data; name="paramname"; filename="foo.txt"
Content-Type: text/plain

... file contents here ...
--BOUNDARY--

boundary明らかな理由により、はファイルの内容に含めることはできません。

独自の境界を作成するにはどうすればよいですか?ランダムな文字列を生成し、それがファイルの内容に含まれているかどうかを確認し、含まれている場合は、一意の文字列ができるまで、新しい文字列を生成し、すすぎ、繰り返しますか?または、「かなりランダムなトークン」(たとえば、タイムスタンプ、プロセスIDなどの組み合わせ)で十分でしょうか?

4

4 に答える 4

53

GUIDのようにランダムなものを使用する場合は、境界のエイリアスを確認するためにペイロードをハントする必要はありません。何かのようなもの:-

---- = NextPart_3676416B-9AD6-440C-B3C8-FC66DDC7DB45
ヘッダー:...。

ペイロード
----=NextPart_3676416B-9AD6-440C-B3C8-FC66DDC7DB45--

于 2010-01-15T12:34:29.297 に答える
13

Javaの人のために:

protected String generateBoundary() {
             StringBuilder buffer = new StringBuilder();
             Random rand = new Random();
             int count = rand.nextInt(11) + 30; // a random size from 30 to 40
             for (int i = 0; i < count; i++) {
             buffer.append(MULTIPART_CHARS[rand.nextInt(MULTIPART_CHARS.length)]);
             }
             return buffer.toString();
        }

private final static char[] MULTIPART_CHARS =
             "-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
                  .toCharArray();

参照URL: http: //hc.apache.org/httpcomponents-client-ga/httpmime/xref/org/apache/http/entity/mime/MultipartEntity.html

于 2011-04-16T13:40:21.630 に答える
0

妄想を感じている場合は、ランダムな境界を生成し、送信する文字列でそれを検索し、検索時にランダムな文字を追加(または新規に再作成)して、繰り返します。しかし、私の経験では、10文字程度の任意の非辞書文字列はほとんど発生しないため、--- BOUNDARY --- BOUNDARY ---BOUNDARY---のようなものを選択するだけで十分です。

于 2010-01-15T12:31:59.470 に答える
0

そして、Swiftの人々のために(Javaのバランスを取るために):

func createBoundaryString() -> String {
    var str = ""
    let length = arc4random_uniform(11) + 30
    let charSet = [Character]("-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")

    for _ in 0..<length {
        str.append(charSet[Int(arc4random_uniform(UInt32(charSet.count)))])
    }
    return str
}
于 2018-03-29T12:22:46.753 に答える