1.XSS
Cross Site Scripting 跨站脚本攻击
XSS攻击注入点
- HTML节点内容
- HTML属性
- Javascript代码
- 富文本
PHP中防止XSS攻击
- 内置函数转义:htmlspecialchars--将特殊字符转换为 HTML 实体
- DOM解析白名单
- 第三方库
- CSP
2.CSRF
Cross Site Request Forgery 跨站请求伪造
攻击原理
- 用户登录A网站
- A网站确认用户身份
- B网站向A网站发起请求(携带用户在A网站的身份)
特点
- 带A网站Cookies
- 不访问A网站前端
- referer为B网站
防御
- 禁止第三方网站携带Cookies:Cookies里的same-side属性 设置为Script或Lax
- 在前端页面加入验证信息(验证码/token)
- 验证referer,禁止来自第三方网站的请求
3.点击劫持
点击劫持,clickjacking,也被称为UI-覆盖攻击。通过覆盖不可见的框架误导受害者点击。虽然受害者点击的是他所看到的网页,但其实他所点击的是被黑客精心构建的另一个置于原网页上面的透明页面。这种攻击利用了HTML中<iframe>标签的透明属性。
防御
- js中判断 if (top.location != window.location ){} 如果不等于,则包含iframe页面,可能被劫持。不过攻击者可以通过设置iframe禁用js脚本执行:H5属性 sandbox=""
- HTTP响应头添加X-Frame-Options,有三个值:1.DENY:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。2.SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示。3.ALLOW-FROM uri:表示该页面可以在指定来源的 frame 中展示。PHP中为:header("X-Frame-Options:DENY");
4.传输安全
HTTP被监听和篡改
防御
采用HTTPS
5.密码安全
- HTTPS传输
- 频率限制,限制用户登录频率,防止密码被恶意猜测
- 前端加密(意义有限),攻击者可以直接将密文传给服务器,一样可以攻击,只是防止了用户明文密码的泄露
PHP密码加密
推荐:加密:password_hash($password, PASSWORD_DEFALUT)
解密:password_verify($password, $hash)
6.接入层注入
PHP防止SQL注入
- 检查数据类型
- 对数据进行转义
- 参数化查询,SQL预处理
7.接入层上传
防御
- 限制上传后缀:pathinfo()函数
- 文件类型检查:type
- 文件内容检查:文件二进制开头 / finfo_file(finfo_open(), $file_name)
- 程序输出:通过程序执行输出,不要让用户直接执行
- 权限控制:可写可执行互斥
8.社会工程学和信息泄露
在信息安全这个链条中,人的因素是最薄弱的一环节。社会工程就是利用人的薄弱点,通过欺骗手段而入侵计算机系统的一种攻击方法。组织可能采取了很周全的技术安全控制措施,例如:身份鉴别系统、防火墙、入侵检测、加密系统等,但由于员工无意当中通过电话或电子邮件泄露机密信息(如系统口令、IP地址),或被非法人员欺骗而泄露了组织的机密信息,就可能对组织的信息安全造成严重损害。
社会工程学通常以交谈、欺骗、假冒或口语等方式,从合法用户中套取用户系统的秘密。熟练的社会工程师都是擅长进行信息收集的身体力行者。很多表面上看起来一点用都没有的信息都会被这些人利用起来进行渗透。比如说一个电话号码,一个人的名字,或者工作的ID号码,都可能会被社会工程师所利用。
防御