用户在PHP中提交的链接的安全规则

时间:2011-06-16 14:07:04

标签: php html security

我正在为一所大学开展一个项目。在每门课程中,教师都可以输入他们希望学生看到的链接。老师也可以允许学生自己发布链接。

但是,您可以在文本字段中输入任何内容,这意味着您可以发布恶意链接,当然我不希望这样。

有什么好的“规则”可以阻止你发布任何内容?例如:我在考虑搜索字符串的第一部分“http://”,以确保它不是JavaScript或其他东西。

提前致谢。

7 个答案:

答案 0 :(得分:2)

试图过滤输入将证明是无效的,因为绕过它是微不足道的,你需要问责制。由于上下文是大学课程,因此您拥有一个相对较小的小组,其中具有可验证的身份 - 这使得问责制变得尽可能简单。

只需确保用户的姓名与他们发布的链接相关联,并提醒用户保护其登录凭据的重要性。

如果人们发布不合适的资料,那么他们的帐户可以暂停或只读,或者可以采取其他措施。

  

我在想也许会在字符串的第一部分搜索“http://”,以确保它不是JavaScript或其他内容。

如果是https://怎么办?如果网址包含&个字符,该怎么办?

通过htmlentities运行输入。这将保护您免受破坏HTML(有意和无意)的代码。

答案 1 :(得分: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);
}

答案 2 :(得分:0)

是的,检查URL前缀肯定会有所帮助。还要检查有效的URL字符。

可以轻松地使用PHP和Regex完成 - http://phpcentral.com/208-url-validation-in-php.html

希望有所帮助。

答案 3 :(得分:0)

我会使用strip_tagshtmlentities,然后使用preg_replace将所有链接放在<a>中。

答案 4 :(得分:0)

当然,你应该确保链接在显示时被html转义(使用htmlentities()并使用utf-8作为字符集)。

确保在开头有一个http://当然是一个好主意,以避免在用户点击链接时执行javascript。

在那之后,你可以避免人们发布恶意链接。

Google会使用该链接重定向到第一个页面,并警告用户他将被重定向到潜在的恶意网站。

答案 5 :(得分:0)

这是什么问题? :)

我的意思是:

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

echo $link;

正如其他悲伤......你是一群有账户的人,只是推进人们用日期时间做的事情,你总会知道谁,什么,何时;)

答案 6 :(得分:-1)

我不确定你可以,因为如果有人真的想要受伤,他或她可以创建一个重定向到恶意网页的普通网页......保护它的最佳方法是:

  • 从技术上讲:使用htmlentities阻止人们在字段中输入javascript,url_encode以确保字符编码良好。
  • 合法地:写一些链接不能是恶意的。