2012-07-27 36 views
1

這裏是一個菜鳥的問題,如果我有一個textarea不提交任何地方...jQuery的前置安全

<form onsubmit="return false;"> 
     <textarea name="new_title_text" id="new_title_text"></textarea> 
</form> 

,我使用jQuery textarea的價值,預先準備一個div ...

var textValue = $('#new_title_text').val() 
$('#myDiv').prepend('<div>' + textValue + '</div>'); 

是否有任何這方面的安全漏洞?有人可能以某種方式注入JavaScript並執行XSS,CSRF或任何其他類型的攻擊?我明白,一旦我將價值提交給我的服務器,那麼它需要被檢查,但是在提交之前是否有任何可能發生的事情?

感謝先進!

回答

4

基本上你不能相信任何驗證完成客戶端的人可以(很容易)繞過JavaScript驗證。

在您的服務器上做適當的驗證和衛生處理,並且僅爲用戶體驗留下客戶端驗證,並且不要用明顯無效的數據「打擾」服務器,例如需要值的空字段。


除非你讓你的用戶提交一些PHP代碼或JavaSctipt代碼在你的網站的其他地方執行,否則你應該是安全的。永遠記得不是來信任來自用戶的任何數據。如果您打算稍後使用它,將所有傳入的數據視爲潛在威脅,並對所處理的任何內容進行清理。

0

其基本思想是,使用prepend與不受信任的數據是不安全的。然而,可利用性取決於情景。如果攻擊者可以製作一個導致腳本以不可信值運行的url,那麼您肯定會遇到XSS問題。但是,如果用戶只能通過輸入不安全的數據並單擊按鈕來觸發此操作,則它更安全,但不完全。這通常被稱爲自XSS和有時與點擊劫持等

利用一道,爲不安全的jQuery功能的更多信息,請參閱:http://erlend.oftedal.no/blog/?blogid=127

1

有人能以某種方式注入JavaScript和瓶坯XSS,CSRF或任何其他類型的攻擊

是的。您正在將文本注入HTML字符串而沒有HTML轉義,因此該字符串中的任何元字符(<&)都將失敗,並且可能容易遭受注入式攻擊(例如<script>...)。

問題是誰是那個人?從當前的代碼看,外部團體不可能預先填充文本區域,所以它必須是用戶自己攻擊(不是真正的漏洞)。

所以,你要麼需要HTML轉義字符串進入HTML,或者更好的,使用DOM風格的訪問方法,如.text().attr()設置文本內容,並且不使用粗串生成標記屬性。或創建速記:

$('#myDiv').prepend(
    $('<div>', {text: $('#new_title_text').val()}) 
);