回复内容过滤 XSS 后内容为空时,使用更加友好的处理方式
为了对回复内容进行 XSS 过滤,教程中是通过在模型监控器 ReplyObserver 中监控 created 事件来实现,但是这就会造成一个问题:当过滤后的内容为空时,依旧将空内容的回复插入到数据库中,其实这是有问题的。
我的想法是在控制器里进行 XSS 过滤,并对过滤结果进行判断,代码如下:
public function store(ReplyRequest $request, Reply $reply)
{
// XSS 过滤
$content = clean($request->get('content'));
if (empty($content)) {
return redirect()->back()->with('error', '回复内容错误!');
}
$reply->content = $content;
$reply->user_id = Auth::id();
$reply->topic_id = $request->get('topic_id');
$reply->save();
return redirect($reply->topic->link())->with('success', '创建成功!');
}
本帖已被设为精华帖!
本帖由系统于 5年前 自动加精
关于 LearnKu
高认可度评论:
哥,别人攻击你,你还给他一个友好的提示?
小小的更改一下,这里的错误返回信息将error改为denger,无需更改其它部分代码。页面报错部分为红色醒目。
xss 过滤后内容为空时,确实不应该保存进我们的数据库。
我的处理方案如下:
@Elinger 友好的提示不重要 重要的是 别人可以往你的回复里发布空内容了
哥,别人攻击你,你还给他一个友好的提示?
@Elinger 友好的提示不重要 重要的是 别人可以往你的回复里发布空内容了
这个想法很有意义,可以防止往数据库中插入内容为空的回复。
不是有这个么?
@FakeSPrite 是 XSS 过滤之后内容为空了
小小的更改一下,这里的错误返回信息将error改为denger,无需更改其它部分代码。页面报错部分为红色醒目。
个人觉得 这个没有什么意义 第一如果有人插入这样的内容说明是有意而为之 不需要警告任何东西 就好比被404 因为是错误操作所以不需要告诉你任何东西 直接粗暴的404 还有一点就是 如果想做的话 建议 最好不要在控制器里 去做这些事情 laravel 加了observer 等等这些东西 就是想让应该完成的功能在应该的地方完成 其实这些功能都可以在控制器中完成 不过那样就相当的麻烦 所以我认为在学习完laravel 之前 最好跟着作者的方式走! 把实现的功能放到它应该所在的位置上!
是否可以直接通过e函数 直接处理了 ?
xss 过滤后内容为空时,确实不应该保存进我们的数据库。
我的处理方案如下:
按作者的方式更好
以上老哥代码的完善,还可以再完善,但是我是菜鸟,就不深入了
【1】修改config/purifier.php
【2】ReplyObserve.php文件修改
如果回复真的只是要讨论代码, 这么做会好一点
$reply->content = htmlspecialchars($request->content);小弟是这么写的,再把store里面的with方法去掉就OK了.
不如直接搞个中间件专门过滤xss,不然这里有危险,这里加一段,那里有危险,那里又加一段,重复率很高。中间件里面检测到xss提交,直接显示非法输入就行了。