2011-06-16 87 views
1

我正在爲一所大學開展項目。在每門課程中,教師都可以輸入他們希望學生看到的鏈接。老師也可以允許學生自己發佈鏈接。用戶在PHP中提交的鏈接的安全規則

但是,您可以從字面上輸入任何內容到文本字段中,這意味着您可以發佈惡意鏈接,當然我不希望這樣。

什麼是一些很好的「規則」,以防止發佈任何內容?例如:我在想也許在字符串的第一部分搜索「http://」,以確保它不是JavaScript或其他東西。

在此先感謝。

+1

歡迎來到可怕的,可怕的正則表達式世界。你可以在這裏查看它:http://www.regular-expressions.info/php.html – John 2011-06-16 14:10:29

+1

如果有人發佈'http://nastypornsite.com'會怎麼樣?完美的「良好」的鏈接,但不是你想在教育論壇發佈的東西。你想要走多遠的驗證兔子洞? – 2011-06-16 14:14:17

+0

我正在考慮混合使用正則表達式,並針對發佈不適當鏈接的用戶採取措施。在我16歲的時候,這是我第一份暑期工,我只在四天前從這裏開始,我還沒有進入這個系統,我會在這裏與工作人員聽到我們可以採取什麼措施。 – Saser 2011-06-17 08:24:52

回答

0

您可以使用正則表達式測試輸入值。

這裏是一個將匹配任何有效的URL地址,並沒有別的:

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ 

這裏是你如何在PHP中使用它:

function validateURL($url) 
{ 
    return preg_match("/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/", $url); 
} 
+0

此功能似乎不喜歡問號。例如: 'http:// www.hv.se/index.php'沒問題,但不是'http://www.hv.se/index.php?'或'http://www.hv。 SE/index.php的?等等= blah'。 – Saser 2011-06-17 09:00:01

-1

我不知道就可以了,因爲如果有人真的想傷害,他或她可以創建一個普通的網頁重定向到惡意的一個......以保護,最好的辦法是:

  • 技術上:使用htmlentities來防止人們在字段中輸入javascript,並確保字符編碼良好。
  • 從法律上說:寫某個地方的鏈接不能是惡意的。
+0

您仍然可以編寫javascript:URL! – 2011-06-19 02:57:04

0

當然,您應該確保鏈接在顯示時會被轉義(使用htmlentities()並以utf-8作爲字符集)。

確保在開始處有一個http://當然是避免在用戶單擊鏈接時執行javascript的好主意。

之後,避免人們發佈惡意鏈接的做法並不多。

谷歌重定向到一個頁面第一,與鏈接,並警告用戶,他將被重定向到一個潛在的惡意網站。

2

試圖過濾輸入將被證明是徒勞無益的,因爲它是微不足道的繞過,你需要問責制。由於上下文是大學課程,因此您有一個相對較小的團體,具有可驗證的身份 - 這使問責變得非常簡單。

只要確保用戶的名字與他們發佈的鏈接相關聯,並提醒人們保護他們的登錄憑證的重要性。

如果有人發佈不適當的材料,那麼他們的帳戶可以被暫停或只讀,或採取其他措施。

我在想也許在字符串的第一部分搜索「http://」,以確保它不是JavaScript或其他東西。

如果是https://怎麼辦?如果網址包含&字符,該怎麼辦?

通過htmlentities運行輸入。這將保護您免受破壞HTML的代碼(既有意也無意)。

0

這是什麼問題? :)

我的意思是:

$link = htmlentities($_POST['link']); 
$link = str_replace('http://','',$link); 
$link = 'http://'.$link; 

echo $link; 

其他傷心......你是在人的賬戶轉了一圈,剛推入DB什麼人做一個datetime和你總是會知道是誰,是什麼,當;)