簡而言之,我想將圖像的二進制數據發送到我的處理程序,它將以字節數組的形式保存在數據庫中。閱讀我的JavaScript使用readAsBinaryString(f)
文件輸入的值,我會得到的輸出是這樣的:FileReader.readAsBinaryString返回二進制文件還是基於ASCII的字符集?
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轉換是否包含有關其數據類型的元數據?
還有另一種方法http://stackoverflow.com/questions/3436398/convert-a-binary-string-representation-to-a-byte-array – stuartd
感謝您的迴應,stuartd。我的問題是我的初始「二進制字符串」不表示爲1s和0s,就像上面的代碼片段,顯然不是二進制的,*我認爲*。爲什麼'readAsBinaryString'返回那*作爲*?那是我不熟悉的另一種二進制形式嗎? – Josh
這看起來像'Assembly'給我。這本身就是奇怪的。 – Brian