概述:
TP5是优秀的轻量级PHP开发框架,为我们的开发提供了很多便捷。但是有时候TP5一些默认配置很容易忽视,不然会导致渗透攻击,本文我来分享一下我的一些小经验
问题列表:
1、关闭调试模式
调试模式为我们开发人员发现错误,查找错误提供了非常友好且便捷的显示方式。但是也为渗透攻击提供了方便,因此我们需要除了测试环境下,其他环境必须关闭该模式。具体位置为config/app.php(根据你的项目实际配置文件位置)app_debug 参数,true为开启,false为关闭。
2、特殊字符过滤
谈到渗透攻击,当然不可忽视的是sql注入、xss跨站脚本攻击这两种攻击,而对于这两种攻击最基础的防护是对特殊字符过滤,比如尖括号、双引号等特殊字符的过滤。其实TP5提供了全局的过滤规则设置,你可以修改设置,就可以实现对特殊字符的过滤。具体位置为config/app.php(根据你的项目实际配置文件位置)default_filter 参数’htmlspecialchars,addslashes,strip_tags’。
参数介绍:
htmlspecialchars:防XSS攻击,尖括号等转义过滤
addslashes:防SQL注入,在每个双引号(")前添加
strip_tags:剥去字符串中的 HTML 标签
3、登录开启验证码模式
常见渗透攻击当然是少不了暴力破解,对你账号密码弄一套字典,然后进行枚举登录尝试。遇到这样的情况,解决方法可以是限制IP时间段内的错误次数、验证码登录等等。而TP5正好提供了验证码类,并且使用简单。具体可以参考TP5验证码功能介绍
4、上传类型白名单限制
常见渗透攻击还有是文件上传类,可以通过抓包把上传的恶意文件进行改后缀来绕过前端对文件类型的限制,然后再网页执行,这攻击往往属于高危漏洞级别。那么我们应该后端可以对文件的类型进行白名单来限制该攻击。比如,图片上传,那么我们就只运行文件格式类型为jpg、gif、png等图片格式。以下为我的项目中上传通用方法中的修改:
$file_type = array(
'image/jpeg',
'image/png',
'image/jpg',
'image/pjpeg',
'image/x-png',
'image/gif',
); //白名单数组
$files = request()->file();
if (is_array($files)) {
foreach ($files as $vo) {
if(!$vo->checkMime($file_type)) return json(['code' => 1, 'msg' => '请上传图片格式的文件!']);
$info = $vo->move('../public/static/uploads');
if ($info) {
$url[] = '/static/uploads/' . date('Ymd') . '/' . $info->getFilename();
} else {
return json(['code' => 1, 'msg' => $vo->getError()]);
}
}
} else {
if(!$files->checkMime($file_type)) return json(['code' => 1, 'msg' => '请上传图片格式的文件!']);
$info = $files->move('../public/static/uploads');
if ($info) {
$url[] = '/static/uploads/' . date('Ymd') . '/' . $info->getFilename();
} else {
return json(['code' => 1, 'msg' => $files->getError()]);
}
}
PS:除了白名单限制,对于上传目录以最小权限原则分配。
总结:
其实渗透攻击有很多种,防护也有很多种。以上为我的一些小经验而已,可优化的地方还有很多,比如说升级防护暴力破解的,还可以对前端传参进行加密操作,那么就能大大提升枚举的难度,从而达到增强防护的效果。如果大家看完本文还有其他自己的见解,欢迎留言哈!