亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么要在渲染局部之前進行escape_javascript?

為什么要在渲染局部之前進行escape_javascript?

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

3 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

是否因為您不希望用戶發布瀏覽器實際執行的JavaScript?


查看完整回答
反對 回復 2019-12-10
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

如果您在這里查看源代碼,它將更加清晰。

此功能完成以下兩件事:

  1. 它將輸入字符串中的字符替換為JS_ESCAPE_MAP中定義的字符

    這樣做的目的是確保javascript代碼正確序列化,而不會干擾嵌入它的外部字符串。例如,如果您的JavaScript字符串用雙引號引起來,則字符串文字中的所有引號都必須用單引號引起來,以免破壞代碼。

  2. 該函數還檢查結果字符串是否為html安全。如果不是,則進行必要的轉義以確保該字符串變為html安全并返回結果。

當您使用escape_javascript時,通常會動態地將其嵌入到另一個字符串或現有的html中。您需要確保這樣做不會使整個頁面無法呈現。

其他回復中指出了此回復的某些方面,但我想將所有內容放在一起,包括javascript轉義和html轉義之間的區別。此外,一些響應暗示此功能有助于避免腳本注入。我認為這不是此功能的目的。例如,在您的評論中,如果您的評論具有警報(“嗨,那里”),則僅將其附加到節點將不會觸發彈出窗口。您沒有將其嵌入在頁面加載或通過其他事件觸發的函數中。僅將alert('hi there')作為您的html的一部分并不意味著它將作為javascript執行。

話雖如此,但我并不否認不可能進行腳本注入。但是要避免這種情況,在獲取用戶數據并將其存儲在數據庫中時需要采取步驟。您提供的功能和示例與呈現已保存的信息有關。

希望這對您有所幫助。


查看完整回答
反對 回復 2019-12-10
  • 3 回答
  • 0 關注
  • 918 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號