简而言之,我想将图像的二进制数据发送到我的处理程序,该处理程序将作为字节数组保存在数据库中。使用我的 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 转换是否包含有关其数据类型的元数据?