2010-11-29 62 views
0

我需要停止用戶將JavaScript放入應該是鏈接字段的位置。我知道我可以在他們輸入的網址開頭檢查「javascript:」,但我想知道是否有某種方法可以構建<a>標籤來強制它將href作爲地址對待?我覺得這將是一個更好的解決方案,因爲人們總是想方設法避開基本檢查。防止用戶輸入javascript而不是用於在href中使用的url

+2

爲了什麼目的呢?該字段是否發送到服務器?如果是這樣,驗證應該發生在那邊。任何人都可以隨時與客戶一起做任何想做的事情。 – spender 2010-11-29 20:12:22

+0

這是爲了阻止用戶製造XSS攻擊。 – 2010-11-29 20:19:58

回答

3

一個有趣的解決方案(如果你問我,非常有效)是將http://放在尚未開始的URL前面。這是我的意思的草圖:

if(url.slice(0,"http://".length) !== "http://" && url.slice(0,"https://".length) !== "https://") { 
    url = "http://" + url; 
} 
+0

這可能是一個很好的解決方案。謝謝。 – 2010-11-29 20:21:42

0

沒有強制標籤將href作爲URL對待的純HTML方式。

你唯一能做的就是檢查href屬性中的javascript。

1

更好的白名單比黑名單和檢查http(s)協議,我猜。

1

您總是可以預先安裝http://或https://協議。可能需要替換才能刪除任何現有的http或https。

即使你有

http://javascript:alert('test'); 

的JavaScript將無法運行。

1

首先,您應該認識到瀏覽器可以被操縱爲提交用戶想要的任何內容,因此客戶端驗證既不必要也不足夠,只是方便(對用戶)。

鑑於這種情況,一個簡單的過程,想到:

  • 強制每個URL是需要在URL的開頭協議規範絕對的。
  • 強制該協議是{http,https}之一。

試試這個:

function validateUrl(value) { 
    return value.match(/^(http|https):\/\//) != null; 
} 

if(validateUrl(inputField.value)) { 
    // value is acceptable 
} else { 
    // value is not an acceptable URL 
}