つまり、イメージのバイナリ データをハンドラーに送信し、DB にバイト配列として保存したいと考えています。Javascriptを使用してファイル入力の値を読み取ると、次のreadAsBinaryString(f)
ような出力が得られます。
GIF89a,úæÿÿÿ2c½3fÌ Smaäµééúþc«T.[ÈéùAtεÚõ[ãXßÆî*[µc³8Ûõüÿfj¥æ§ÈïÛå÷ËØñI}ÓQ×
*\»q£E}Ûÿå§ÓõþÿIÛv¤Þ´Åè«æ ³][us¬çAy×MÞ,a½«ÔóZÝL2äëùQ×(Eq<pË5V¨·ÏIÓ¨»åQßY¥3bØÈ
æ¬z³é<uÓ3£ÎñE¾á÷RÛR¢K®ÎØØìÍAtÓÑÔØrÀ-hݪÑïôõüR|ÎäóÖUËåæçXÔw»^s®ëI}ÛQ}ÔEÛ·Îñ½Óêd»Ì
ÌëöåóôöÖàñE×Cr¿C¤3óúëLÍYÜ3fõûöÑðû Øûÿõw²ñ`ª»ßÀy|Á¿ÃIuÔM×ûñû{¹R4¼ìe¡äl«ç!ÿNETSCA
PE2.0!ÿXMP DataXMP<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpm
eta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02
/06-14:56:27 // etc..
そのデータは AJAX 経由で送信されます。
$.ajax({
url: theUrl,
type: 'POST',
data: { Image: image } // image = data above
});
これはバイナリ文字列ですか?この文字列をハンドラー (IHttpHandler) に送信すると、バイト配列に格納するために、エンコーディングを ISO-8859-1 に設定した場合にのみバイトを取得できます。
public void ProcessRequest (HttpContext aContext)
{
// This works as long as requestValidationMode = "2.0" in web.config
// Is there a way to bypass HttpRequestValidationException just on
// THIS data?
byte[] imageBytes = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(_Context.Request["Image"]);
//...
}
これは正常ですか?これにより、HttpRequestValidationException もスローされます (潜在的に危険な Request.Form 値が..から検出されました)。requestValidationMode
XSS に対応しているので変更したくないので、バイナリ文字列をどのようにエスケープしますか? Base64エンコーディングはこれをカバーしていますか?もしそうなら、ハンドラーでのBase64からの変換には、そのデータ型に関するメタデータが含まれていますか?