鳳凰求蠱
2019-12-10 10:03:27
我正在看這個Railscast插曲,想知道為什么在escape_javascript這里需要致電:$("#reviews").append("<%= escape_javascript(render(:partial => @review)) %>");有什么escape_javascript用?根據Rails的文檔:escape_javascript(javascript)轉義符返回以及JavaScript段的單引號和雙引號。但這對我來說意義不大。
3 回答

qq_花開花謝_0
TA貢獻1835條經驗 獲得超7個贊
如果您在這里查看源代碼,它將更加清晰。
此功能完成以下兩件事:
它將輸入字符串中的字符替換為JS_ESCAPE_MAP中定義的字符
這樣做的目的是確保javascript代碼正確序列化,而不會干擾嵌入它的外部字符串。例如,如果您的JavaScript字符串用雙引號引起來,則字符串文字中的所有引號都必須用單引號引起來,以免破壞代碼。
該函數還檢查結果字符串是否為html安全。如果不是,則進行必要的轉義以確保該字符串變為html安全并返回結果。
當您使用escape_javascript時,通常會動態地將其嵌入到另一個字符串或現有的html中。您需要確保這樣做不會使整個頁面無法呈現。
其他回復中指出了此回復的某些方面,但我想將所有內容放在一起,包括javascript轉義和html轉義之間的區別。此外,一些響應暗示此功能有助于避免腳本注入。我認為這不是此功能的目的。例如,在您的評論中,如果您的評論具有警報(“嗨,那里”),則僅將其附加到節點將不會觸發彈出窗口。您沒有將其嵌入在頁面加載或通過其他事件觸發的函數中。僅將alert('hi there')作為您的html的一部分并不意味著它將作為javascript執行。
話雖如此,但我并不否認不可能進行腳本注入。但是要避免這種情況,在獲取用戶數據并將其存儲在數據庫中時需要采取步驟。您提供的功能和示例與呈現已保存的信息有關。
希望這對您有所幫助。
添加回答
舉報
0/150
提交
取消