2011-08-19 25 views
0

我的目標很簡單,我有點驚訝,我無法在其他帖子中找到答案,如果我錯過了它,我會提前道歉....如何使用Javascript檢測外部網址

我有一個textarea輸入。我想確保用戶不會發布鏈接到外部網站。

我更喜歡做這個客戶端,並且只是在外部鏈接存在時阻止提交。

我已經看到了無數帖子如何找到網址,並將其製作成href的。我想我可以使用相同的邏輯來簡單地刪除它們,但這不會阻止用戶繼續,我想要做的就是特別停止提交,如果外部鏈接存在。

我還需要允許在同一個域內的鏈接,所以檢測到的鏈接的實際URL也必須進行比較。我已經看到了一種方法來做到這一點,一旦我有一個字符串在自己的網址,但現在,它是在文本的一個parapraph中間somwhere。

+1

客戶端驗證是爲了方便最終用戶,服務器端驗證是您執行規則的地方。您*不能*信任來自客戶端瀏覽器的數據。我可以用任何方式篡改表單提交數據* *您的客戶端javascript已經決定它是好的。您**必須**也做服務器端驗證。 –

回答

1

不要只做這個客戶端。你也必須檢查服務器端。客戶端檢查僅用於改善用戶體驗。任何業務邏輯必須在服務器端處理。

這是微不足道的這樣做,因爲崗位或獲得:

http://url.com?textareainput=http://urltoverybadsite

你可以做一個快速的正則表達式,使其更好的爲您的用戶:

<script> 
function checkLinks() 
{ 
    var links = document.getElementById('textareainput').value.match("/http:\/\//") 
    if (!links) 
    { 
     window.alert("Links not allowed!") 
     return false; 

    } 
    return true; 
} 
</script> 

<form onsubmit="checkLinks()"><textarea id='textareainput'></textarea></form> 
+1

不要告訴他不要做客戶端。當然,他應該做客戶端,但除了服務器端。 – Blazemonger

+0

@ mblase75這就是我的意思。我在第一句的末尾加上了「ONLY」,以使其更清楚。 –

0
<script type="text/javascript"> 
function validate() { 
    var noExternalURLs = true; 
    var currentDomain = window.location.protocol + '//' + window.location.host; 
    var links = new Array(); 
    var re = new RegExp('^'+currentDomain,"gi"); 

    // Get protocol & domain of URLs in text 
    links = document.getElementById('mytextbox').value.match(/(https?:\/\/[\w\d.-]+)/gi); 

    // Loop over links. If protocol & domain in URL doesn't match current protocol & domain then flag 
    for(var i=0; i<links.length; i++) 
    { 
     if(links[i].match(re) == null) 
     { 
      noExternalURLs = false; 
     } 
    } 

    return noExternalURLs; // prevent submit if noExternalURLs==false 
} 
</script> 

<form id="myform" action="index.php" onsubmit="return validate();"> 
    <textarea id="mytextbox"></textarea> 
    <input type="submit" /> 
</form> 
+0

感謝喬的建議,我正在用這個選項。我很欣賞@ byron-whitlock建議一種非常簡單的方法來做到這一點,儘管它似乎沒有像當前的域名解決方案那樣檢查當前的域名。我遇到了一些我認爲與使用TinyMCE的事實有關的問題,希望我可以調試它,使其正常工作。再次感謝。 –

+0

祝你好運!我希望它適合你。 –

相關問題