2011-06-16 103 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和你总是会知道是谁,是什么,当;)