我正在为一所大学开展一个项目。在每门课程中,教师都可以输入他们希望学生看到的链接。老师也可以允许学生自己发布链接。
但是,您可以在文本字段中输入任何内容,这意味着您可以发布恶意链接,当然我不希望这样。
有什么好的“规则”可以阻止你发布任何内容?例如:我在考虑搜索字符串的第一部分“http://”,以确保它不是JavaScript或其他东西。
提前致谢。
答案 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_tags和htmlentities,然后使用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
以确保字符编码良好。