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

PHP中用户提交的链接的安全规则,php,html,security,Php,Html,Security,我正在为一所大学做一个项目。在每门课程中,教师都可以输入他们希望学生看到的链接。老师也可以允许学生自己发布链接 但是,你可以直接在文本字段中输入任何内容,这意味着你可以发布恶意链接,当然我不希望这样 有什么好的“规则”可以阻止你发布任何东西?例如:我想在字符串的第一部分搜索“http://”,以确保它不是JavaScript或其他内容 提前感谢。您可以使用正则表达式测试输入值 这里有一个可以匹配任何有效URL地址的地址,而其他地址则不匹配: /^(https?:\/\/)?([\da-z\.-]

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

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

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


提前感谢。

您可以使用正则表达式测试输入值

这里有一个可以匹配任何有效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);
}

可以使用正则表达式测试输入值

这里有一个可以匹配任何有效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);
}

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

可以使用PHP和正则表达式轻松完成-


希望有帮助。

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

可以使用PHP和正则表达式轻松完成-


希望这能有所帮助。

我不确定你能不能,因为如果有人真的想伤害,他或她可以创建一个正常的网页,重定向到恶意网页。。。最好的保护方法是:

  • 技术上:使用
    htmlentities
    防止人们在字段中输入javascript,并使用
    url\u encode
    确保字符编码良好
  • 合法:在某个地方写下链接不能是恶意的

我不确定您是否可以,因为如果有人真的想伤害,他或她可以创建一个普通网页,重定向到恶意网页。。。最好的保护方法是:

  • 技术上:使用
    htmlentities
    防止人们在字段中输入javascript,并使用
    url\u encode
    确保字符编码良好
  • 合法:在某个地方写下链接不能是恶意的

我会使用preg\u replace,然后在
中放置任何链接。

我会使用preg\u replace,然后在
中放置任何链接。

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

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

在那之后,要避免人们发布恶意链接,你就无能为力了


Google首先重定向到一个带有链接的页面,并警告用户他将被重定向到一个潜在的恶意网站。

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

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

在那之后,要避免人们发布恶意链接,你就无能为力了


谷歌首先重定向到一个带有链接的页面,并警告用户他将被重定向到一个潜在的恶意网站。

试图过滤输入将证明是徒劳的,因为绕过它是微不足道的,你需要承担责任。由于上下文是一门大学课程,你有一个相对较小的群体,拥有可验证的身份,这使得问责变得非常容易

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

如果有人发布了不合适的内容,那么他们的账户可以被暂停或设置为只读,或者可以采取其他措施

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

如果它是https://,该怎么办?如果URL包含
&
字符怎么办


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

试图过滤输入将被证明是徒劳的,因为它是微不足道的,你需要问责。由于上下文是一门大学课程,你有一个相对较小的群体,拥有可验证的身份,这使得问责变得非常容易

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

如果有人发布了不合适的内容,那么他们的账户可以被暂停或设置为只读,或者可以采取其他措施

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

如果它是https://,该怎么办?如果URL包含
&
字符怎么办


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

这是什么问题??)

我的意思是:

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

echo $link;

像其他悲伤的人一样。。。你在一个有账户的圈子里,只要把人们用datetime做什么推到db中,你就会知道谁、什么、什么时候;)

这是什么问题??)

我的意思是:

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

echo $link;

像其他悲伤的人一样。。。你在一个有账户的圈子里,只要把人们用datetime做什么推到db中,你就会知道谁、什么、什么时候;)

欢迎来到可怕的Regex世界。您可以在这里查看:如果有人发布了“”,该怎么办?完美的“好”链接,但不是你想在教育网站上发布的东西