一:安全概述
安全要素
信息安全的核心问题是要保障数据的合法使用者能够在任何需要该数据时获得保密的,没有被非法更改过的数据。主要有以下几要素:机密性、完整性、可用性、可审计性、不可抵赖性。
风险分析
STRIDE威胁模型
评估风险
DREAD评估模型
二:常见攻防
1.XSS
定义:https://baike.baidu.com/item/xss/917356
类型:按照攻击类型一般有 反射型(一次性)、持久性(入DB)...
攻击:
- http://www.letwang.aysaas.com/?name=<script>alert(12345678)</script>
- 后端:<?php echo $_GET['name'];?> 或 前端:<script>document.write(...);</script>
预防:
- 后端:<?php echo htmlentities($_GET['name'], ENT_COMPAT | ENT_HTML401, 'UTF-8', true); ?> 最后指定编码防止多字节攻击
- 前端:escape(...)
2.CSRF
定义:https://baike.baidu.com/item/CSRF
攻击:利用用户已经登录的身份、权限,恶意构造站点合法的提交请求,诱惑、欺骗用户点击,达到违反用户主观意愿实现自己目的的操作 比如:张三发起1个“审批500万合同的表单按钮”伪装成心灵鸡汤图片,分享给上司,上司点击进去,的确看到了鸡汤文,程序也同时使用了上司的身份、权限同意了该合同的审批,且上司完全不知情。
预防: 图片验证码(传统的输入式、12306的人工辨别式、网银等滑动游戏式、短信验证码) 每个表单生成唯一的csrf_token,提交验证该参数的合法性 总之,确保该请求需要人机互动确保该人主观意愿下的操作
3.SQL injection
定义:https://baike.baidu.com/item/sql%20injection
攻击:
//请求
http://www.letwang.aysaas.com/?field=user_id&value=admin";UPDATE `sys_user_base` SET `theme` = 00 WHERE id = 1;select "1
//代码
<?php $sql = 'SELECT * FROM sys_user_base WHERE '.$_GET['field'].'="'.$_GET['value'].'"'; $data = \Dbio::query($sql);
//输出:
SELECT * FROM sys_user_base WHERE user_id="admin";UPDATE `sys_user_base` SET `theme` = 00 WHERE id = 1;select "1"
4.ClickJacking
定义:https://baike.baidu.com/item/clickjacking
攻击:视觉上的欺骗手段,攻击者将一个透明的、不可见的iframe覆盖在一个网页上,通过调整iframe页面位置,诱使用户在页面上进行操作,在不知情的情况下用户的点击恰好是点击在iframe页面的一些功能按钮上。
预防: 服务端NGINX增加配置: add_header X-Frame-Options [DENY|SAMEORIGIN|ALLOW-FROM];
5.File upload、File Down
定义:https://baike.baidu.com/item/%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E
攻击: 上传:上传含有木马的jpg文件、上传可执行文件 下载:file_get_contents('/upload/'.$_GET['file']);模拟参数下载平台任意文件
预防: 上传:锁定操作目录、目录设置权限为禁止执行、重命名文件名、大小 数量 类型限制
6.Spider crawling
定义: site:qycloud.com.cn http://web.archive.org/web/*/http://www.qycloud.com.cn
攻击: 根据搜索引擎抓取结果分析URL特征、输出结果等 分析此域名从诞生到现在的一切历史轨迹(业务分析)
预防: robots.txt限制蜘蛛抓取
7.Parameter verification
定义: 参数合法性验证
攻击: 超长文本提交、不合适类型提交、不符合范围提交、后端缺乏验证 http://www.letwang.aysaas.com/?a[]=1&a[]=2&a[10]=3 <?php $a = $_GET['a']; var_dump($a);//array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [10]=> string(1) "3" }
预防: $a = filter_input(INPUT_GET, 'a', FILTER_VALIDATE_REGEXP, ['options' => ['default' => '','regexp' => '/^[[:alpha:]]{1,32}$/u']]);
8.HTTP hijacking
定义: https://baike.baidu.com/item/http%E5%8A%AB%E6%8C%81
攻击: 篡改会话数据 恶意跳转、植入
预防: 选择好的服务商 使用HTTPS
9.DNS hijacking
定义: https://baike.baidu.com/item/DNS%E5%8A%AB%E6%8C%81
攻击: 篡改域名数据 访问的域名指向别的服务器IP地址
预防: 保护好路由器 选择好的服务商 及时监控预警
10.Session hijacking
定义:https://baike.baidu.com/item/%E4%BC%9A%E8%AF%9D%E5%8A%AB%E6%8C%81
攻击: 某种方法获取A用户session id植入自己浏览器中,以A用户身份操作数据
预防: 用户登录时,存储A用户IP、浏览器头、加密cookie,每次会话时进行验证 设置Cookie httponly属性,不会轻易泄露cookie session
11.Directory traversal
定义: 用户根据搜索引擎、猜测,得到目录路径,访问后,展示出该目录下所有源文件
攻击: 根据遍历出的源文件,突破寻找漏洞,任意执行文件
预防: <Directory "/home/root/"> Options FollowSymLinks </Directory>
12.Physical path
定义: 某种操作下(不排除用户故意为之),程序主动报错,抛出站点详细信息,如 throw new Exception();
攻击: 根据得到的服务器信息、真实物理路径,成为猜测爆破其他漏洞提供依据
预防: ini配置 html_errors = Off display_errors = Off throw new Exception()进行定制阉割
13.Source code exposure
定义: 源代码因托管主机、旁注漏洞、仓库权限等某种原因导致源代码泄露到互联网上
攻击: 深度分析源代码等同开源代码,攻击随时会发起
预防: 独立主机,保护好源代码入口权限
14.Code Injection
定义:外部参数在没有安全过滤情况下被phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen等系统命令所执行
攻击: http://www.letwang.aysaas.com/?a=ls;cd ../../;ls <?php system($_GET['a']);?> <?php echo `tree`;?> //遍历服务器目录、删库跑路、上传木马文件
预防: 用户禁止交互下使用系统高危命令 服务器禁止高危命令 如开启 disable_functions 如果一定要使用,做好输入参数过滤控制(不推荐,因为很难过滤干净)
15.Excessive operation
定义:自己通过某种URL或者某种操作处理了自身原本不应该操作的动作,如账户提权、越权操作
攻击:<?php if ($_SESSION['user']) { //查看admin数据 header('Location: /');//有2个问题:header后缺少exit();2.权限太粗 } //修改admin数据 //删除admin数据 ?>
预防: 每个对外URL资源做好权限细分控制,增强代码评审,杜绝逻辑漏洞
16.Weak password
定义: 弱密码,数据中加密算法太简单,或者是明文密码
攻击: 撞库
预防: 强制用户设置密码必须符合一定强度 比如:至少8位 且必须包含 1个数字、1个大写字符、1个特殊字符 使用PASSWORD_ARGON2I,Argon2 密码散列算法(PHP7.2新增)
17.Out of control
定义: 用户权限存储在用户session中,系统更改权限,session无法及时变更
攻击: 用户一旦拥有权限,只要不退出,可以一直“脱离三界之外”
预防: session禁止存储权限细节信息,放在DB中灵活管控 用户修改密码,强制此用户在所有端下线 增加用户标示,利于强踢恶意用户
18.Redirect attack
定义: 前端、后端根据用户传入的网址进行任意重定向
攻击: 传入恶意网址,重定向到恶意网站
预防: 检查该网址是否属于主站,如果是则放行,如果不是再做相应提醒或处理
19.Violent cracking
定义: 用户根据网站提示,进行无限次操作尝试,直到成功为止
攻击: 根据提示信息嗅探到管理员账号,根据数据字典海量尝试破解获得密码(DDOS)
预防: 提示语禁止太明确 针对一定操作限制每天尝试次数 必要时候要有根据用户恶意行为封IP能力
20.Social worker analysis
定义: https://baike.baidu.com/item/%E7%A4%BE%E4%BC%9A%E5%B7%A5%E7%A8%8B%E5%AD%A6
攻击: 根据众多URL、API、DOM、提示语、报错信息、压力测试、测试账号、DDOS等,收集站点数据,做出硬件、软件、业务评估报告,甚至短时间内高度模仿出DB建模、程序架构,可能涉及同行竞品复制。
预防: 严控对外输出的资源、信息 通用提示语提示 关闭报错提示 防采集、恶意访问封IP机制
三:经验总结
安全是个大话题
通过上述20个例子,基本覆盖了WEB安全的攻击与反攻击,可以发现,控制好用户的“输入”、“输出”至关重要! 道高一尺魔高一丈,只有你想不到,没有黑客做不到,请保持谦逊姿态安全编码!
附录
常用安全工具
- http://sqlmap.org/
- https://portswigger.net/burp/
- https://nmap.org/
- https://my.oschina.net/cart?tab=newest&catalogId=3264278
- AB压测