2011-10-27 211 views
0

http://mysite.com?url=www.google.com 下面提取www.google.com JavaScript而將其寫入作爲<a>href鏈路如何在JavaScript中實現?

<script> 
var urll = (window.location.search.match(/[?&;]url=([^&;]+)/) || [])[1]; 
document.write('<a href="http://'+urll+'">url</a>'); 
</script> 

它的問題是,當它提取URL變得http://mysite.com/www.google.com<a>href值,使if應如果狀態原始URL http://mysite.com?url=www.google.com沒有http://面前?url=然後將其加上href後面的值形成<a href="http://www.google.com">url</a>

在對前一個問題有人評論給了我這個

if (link.substr(0, 7) !== 'http://') { link = 'http://' + link; } 

,但我真的沒有對如何實現它,因爲我從來沒有在JavaScript中使用的if線索。

回答

3

二話不說你讓自己suspectible到XSS attacks

假設一下,如果在url參數(外部網站可以容易惡搞提供了一個鏈接到你的網站)包含字符串"><b>BOLD!</b><div class="。突然你的網頁會顯示一些粗體文字,甚至'儘管你從未在你的網站上使用過<b>標籤。這是可能的最無害的例子,因爲攻擊者同樣可以將任意JavaScript引入頁面(包括竊取用戶cookie的JS)。

道德故事:從來沒有盲目信任用戶輸入,而不是簡單地將其轉換爲HTML。

爲了避免這些類型的攻擊(SQL Injection是針對生成SQL語句的服務器端的代碼非常類似的攻擊)做這兩件事情:

  1. 驗證輸入,以確保它是你期待什麼和如果沒有,請不要接受。在你的情況下,這意味着你想確保url參數實際上代表一個有效的URL。
  2. 僅以「安全」的方式使用用戶數據,而不會引入對輸入的「重新解釋」的可能性。在你的情況下,這意味着你不能像這樣使用字符串連接來構建你的HTML。 Intead使用document.createElement()創建您的a元素,將其href屬性設置爲所需的值(如上所述進行消毒處理),然後在適當的位置在您的DOM中添加新創建的a元素。
+0

我該如何預防? –

+1

@Yusaf:1.)**驗證**輸入以確保**完全符合您的期望(即只有在它是正確的URL時才接受它)和2.)不要像這樣使用字符串連接,相反[在JS中創建一個'a'元素](https://developer.mozilla.org/en/DOM/document.createElement),直接設置它的'href'屬性,然後將該元素插入DOM中適當的位置。 –

+0

看起來像我需要回到繪圖板:(。謝謝你。我只知道HTML和CSS和小javascript,因爲你可以告訴.. –

2

看起來你需要https://developer.mozilla.org/en/JavaScript。 「如果」是任何編程語言的最基本的元素,如果你不明白你真的需要運行一堆基礎知識。

+3

http://w3fools.com/ – Zirak

+1

任何人需要的最後一件事是鏈接到w3schools。 –

+2

請不要鏈接到w3schools,這是爲什麼:http://w3fools.com/ – SparK