2015-10-07 47 views
0

我想在一個靜態html頁面上做一個flash消息。我打算使用下面的代碼,我想知道它是否會帶來安全風險?這是一個安全風險的javascript代碼

$(document).ready(function() { 
 

 
    
 
    \t var results = parseURL(window.location.href); 
 
\t 
 
    \t if (results['info']) { 
 
\t 
 
\t \t $("#flash").html(urldecode(results['info'])); 
 
\t \t $("#flash").addClass("alert-info"); 
 
\t \t $("#flash").removeClass("hidden"); 
 
\t } 
 
\t 
 

 

 
}); 
 

 
function urldecode(str) { 
 
    return decodeURIComponent((str+'').replace(/\+/g, '%20')); 
 
} 
 

 
function parseURL(url) { 
 

 
var parser = document.createElement('a'), 
 
\t searchObject = {}, 
 
\t queries, split, i; 
 

 
// Let the browser do the work 
 
parser.href = url; 
 

 
// Convert query string to object 
 
queries = parser.search.replace(/^\?/, '').split('&'); 
 
for(i = 0; i < queries.length; i++) { 
 
\t split = queries[i].split('='); 
 
\t searchObject[split[0]] = split[1]; 
 
} 
 

 
return searchObject; 
 

 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div id="flash" class="alert hidden" role="alert"></div>

回答

2

是啊,這可能是一個安全風險假設有在該領域值得攻擊的東西。在針對XSS攻擊的info參數中注入JavaScript應該沒有問題。

作爲一般規則,最好不要從頁面上的查詢字符串輸出HTML。

爲此,你可以更換.html方法:

$("#flash").html(urldecode(results['info'])); 

.text方法:

$("#flash").text(urldecode(results['info'])); 
1

你從URL獲取數據,並把它放在網頁作爲HTML 。

第一個風險是跨站腳本攻擊,如果惡意站點向合法用戶提供製作好的鏈接,並在您的域上使用數據(例如cookie),則攻擊者的代碼可以讀取並將其發送到他們自己的服務器。

如果用戶可以訪問您的域上的API,那麼這可能是複雜的,注入的代碼可能以他們的名字發送請求。

所以,是的,儘量不要將URL提取的數據插入爲HTML。將其顯示爲一個字符串,您將會安全(除了社交工程)。

+0

是的,感謝Alexander和Paulpro,XSS-Part現在已經很清晰了,你能解釋一下你對社會工程的一些想法嗎? – Michael

+1

好吧,攻擊者可以在*你的網站上顯示任何消息。包括一條消息,告訴用戶做有害的事情,如果他們相信你的網站,他們可能會相信它。或者它可能是令他們討厭的冒犯性的東西,或者是一些讓他們用奇怪的問題來稱呼技術支持的惡作劇。 – Touffy

1

是的,這是一個問題。您正在解析查詢字符串?info=&info=,然後將所有內容以HTML形式直接插入到頁面中。

如果我做一個網站,把你的隱藏的iframe像<iframe src="//yoursite.com/?info=&lt;script&gt;// anything;" />

我可以讓任意JavaScript您的頁面可以訪問用戶訪問您的網站上我的網站的Cookie上運行。這意味着我可以讓他們在你的網站上做些東西,但他們不知道,或者把他們的cookies發送到我的服務器上,這樣我就可以劫持他們的會話。