首先声明一下常见的web攻击:sql注入 XSS攻击 CSRF攻击
其次分别讲解一下:
1. sql注入:当服务器使用请求参数构造SQL语句时,恶意的SQL被嵌入到SQL中交给数据库执行。
(防范:PDO的预处理语句和参数绑定)
2. XSS攻击(跨站脚本攻击):是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式。
分有两种形式:
反射型攻击(诱使用户点击一个嵌入恶意脚本的链接以达到攻击的目标,目前有很多攻击者利用论坛、微博发布含有恶意脚本的URL就属于这种方式)
持久型攻击(将恶意脚本提交到被攻击网站的数据库中,用户浏览网页时,恶意脚本从数据库中被加载到页面执行,QQ邮箱的早期版本就曾经被利用作为持久型跨站脚本攻击的平台)
(防范:过滤 '<' 或 '>' 符号,或者直接将所有标签转义,并使用POST提交)
3. CSRF攻击(跨站请求伪造攻击):是攻击者通过跨站请求,以合法的用户身份进行非法操作。原理是利用浏览器的Cookie或服务器的Session,盗取用户身份。
(防范:laravel表单提交时加@csrf,检查请求头中的Referer,验证码)
然后,主要讲解 XSS攻击,为以下内容:
composer下载:
composer require ezyang/htmlpurifier
此方法放入common里,作为公共函数,随时调用,用来过滤信息
//过滤 xss if (!function_exists('remove_xss')) { //使用htmlpurifier防范xss攻击 function remove_xss($string){ //相对index.php入口文件,引入HTMLPurifier.auto.php核心文件 //require_once './plugins/htmlpurifier/HTMLPurifier.auto.php'; // 生成配置对象 $cfg = HTMLPurifier_Config::createDefault(); // 以下就是配置: $cfg -> set('Core.Encoding', 'UTF-8'); // 设置允许使用的HTML标签 $cfg -> set('HTML.Allowed','div,b,strong,i,em,a[href|title],ul,ol,li,br,p[style],span[style],img[width|height|alt|src]'); // 设置允许出现的CSS样式属性 $cfg -> set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align'); // 设置a标签上是否允许使用target="_blank" $cfg -> set('HTML.TargetBlank', TRUE); // 使用配置生成过滤用的对象 $obj = new HTMLPurifier($cfg); // 过滤字符串 return $obj -> purify($string); }
一、控制器方法里写入以下代码,进行过滤:
// 参数一为要接收的值,参数二为默认值,参数三为方法名 $data = request()->post('','','remove_xss'); dd($data);
二、在app/request文件写入(运用request依赖注入):
protected $filter=['htmlspecialchars']; // 转义
即这个样子:
protected $filter=['remove_xss']; // 过滤
即这个样子: