注入攻击
sql注入
盲注:在服务端没有错误回显时完成注入攻击
一般构造简单的条件语句,看返回的页面是否变化
Mysql benchmark()函数 让同一个函数执行若干次
攻击技巧
sqlmap
LOAD_FILE 读取系统文件 INTO DUMPFILE写入文件
利用用户自定义函数 UDF来执行命令
攻击存储过程
编码问题
防御
使用预编译语句,绑定变量
使用存储过程,先将SQL语句定义在数据库中
检查数据类型
使用安全函数
最小权限原则,避免高权限账户直连数据库
其他注入攻击
XML注入
代码注入
CRLF注入 CR(\r)和LF(\n)是两个字符 \r\n两个字符表示换行
文件上传
文件上传漏洞是指用户上传了一个可执行脚本文件,通过脚本获取执行服务端命令的功能
Apache文件解析问题 从后往前解析
IIS文件解析 windows环境下截断符号为';' 处理文件扩展名错误
防御
将文件上传目录设置为不可执行
判断文件类型时结合使用MIME Type、后缀检查等方式,推荐使用白名单检测文件类型<br>处理图片时使用压缩函数或者resize函数处理图片时可以破环包含的HTML代码
使用随机数改写文件名和路径
单独设置 文件服务器的域名
认证与会话管理
认证的目的时为了认出用户是谁 ;授权的目的是为了决定用户能够做什么
认证实际上是一个验证凭证的过程
密码必须以不可逆的加密算法或者是单向散列函数算法加密后存储在数据库中
多因素认证:动态口令、数字证书、宝令[采用基于时间同步的双因素动态密码认证技术,每分钟能够生成一个新的、且不重复使用的“动态密码”]、第三方证书
Session与认证 SessionID加密后存在Cookie中
Session Fixation攻击 a先获取一个未经认证的SessionID,将SessionID给b去认证,b认证完了服务器未更新SessionID
Session保持攻击 通过不断发起访问请求,让Session一直活下去
单点登录 SSO
访问控制
某个主体对某个个体需要实施某种操作,而系统对这种操作的限制就是权限控制
操作系统中给文件设置的ACL[Access Control List]访问控制列表
Web应用中常见的访问控制
基于url的访问控制
基于方法的访问控制
基于数据的访问控制
垂直权限管理
访问控制就是建立用户和权限之间的对于关系
现在广泛应用的一种方法---基于角色的访问控制(RBAC)
Spring Security
Spring Security
两种权限管理方式:基于URL的访问控制、基于方法的访问控制、还支持基于表达式的访问控制
水平权限管理
加密算法与随机数
1
2
不建议
不要使用ECB模式
不要使用流密码 如RC4
使用HMAC-SHA1代替MD5
不要使用相同的key做不同的事情
salts与IV需要随机产生
不要自己实现加密算法,使用已经存在的库
不要依赖系统的保密性
建议
使用CBC模式的AES256用于加密
使用HMAC-SHA512用于完整性检测
使用带salt的SHA-256或SHA-512用于Hashing