1.SQL注入
1.1.解释
将一些包含指令的数据传入给解释器,如SQL注入
1.2.防范措施
对特殊字符进行转义
1.3.演示
package mainimport ("github.com/gin-gonic/gin""net/http"
)
import "database/sql"
import _ "github.com/go-sql-driver/mysql"func main() {dsn := "root:123456@tcp(localhost:3306)/test?charset=utf8&parseTime=true"db, err := sql.Open("mysql", dsn)if err != nil {panic(err)}r := gin.Default()r.POST("/find", func(context *gin.Context) {name := context.PostForm("name")password := context.PostForm("pwd")sql := "select * from user where name = \"" + name + "\" and password = \"" + password + "\""res, _ := db.Query(sql)us := make([]User, 0)var user Userfor res.Next() {res.Scan(&user.Id, &user.Email, &user.Name, &user.Password)us = append(us, user)}context.JSON(http.StatusOK, us)})r.Run()}type User struct {Id int `db:"id"`Email string `db:"email"`Name string `db:"name"`Password string `db:"password"`
}
SQL注入
2.失效的身份认证和会话管理
2.1.解释
身份认证:往往是提交用户名和密码
会话管理:SESSIONID
开发人员自定义的认证和会话管理方案存在漏洞,如在 退出,密码管理,超时,记住我,秘密问题,账户更新…
2.2.认证标准
1.存储凭证时,是否使用hashing或加密保护
2.认证凭证是否可猜测,或者能够通过薄弱的账户管理功能
3.会话ID是否暴露在URL中
4.绘画ID是否容易受到会话固定的攻击
5.会话ID会超时吗
6.成功注册后,会话ID会变化吗
7.HTTPS加密传输?
2.3.演示
设置spring security session过期策略;
3.XSS
3.1.解释
(1)存储型XSS(恶意文章): 用户上传文章时,附带了一段恶意的JS代码,其他用户浏览这篇文章时会执行该段代码;
(2)反射型XSS(恶意链接): 在url参数中附加恶意代码,用户打开该URL时,服务器会提取该恶意代码然后拼接到页面中那返回给用户浏览器执行,执行的代码会向恶意服务器发送请求;
(3)DOM型XSS,过程类似反射型XSS,但是js操作DOM直接嵌入页面;
(4)通用型UXSS:利用扩展插件的漏洞
3.2.防范措施
对于DOM型XSS,使用.innerHTML, outerHTML, document.write时小心,尽量使用.textContent, .setAttribute
对输入进行过滤转义;
3.3.演示
4.不安全的对象直接引用
4.1.解释
使用工具截取用户的某个操作,恶意用户修改该操作所提交的某些信息,然后继续提交该信息;
4.2.防范措施
校验用户是否具有操作这个对象的行为权限
5.CSRF
5.1.解释
跨站请求伪造,用户在登录了的状态下访问了恶意链接,而这条链接又指向用户当前的网站;
5.2.防范措施
每次请求网站时均会生成一个csrf_token,然后服务端会校验该csrf_token;
6.安全误配置
6.1解释
(1)应用程序服务器管理员控制台自动安装后没有被删除;
(2)默认账户未修改
(3)服务器上的目录索引未被禁止
(4)错误日志未屏蔽
6.2.防范措施
检查浏览器中的session或jwt是否和服务器端校验该请求时得到的处理人的id是否一致;
7.限制URL访问失败
7.1.解释
(1)用户可以直接修改URL上的参数,如价格,数量;
(2)没有姣好的权限管理机制;
7.2.防御措施
(1)检查URL中参数信息是否正确;
(2)检查URL中是否显示了重要的信息;
(3)优雅的权限管理机制
8. 未验证的重定向和转发
8.1.解释
地址重定向可能会使得用户进入钓鱼网站
8.2.防御措施
(1)避免使用重定向和转发机制
(2)校验用户参数的合法性
9.使用带漏洞的组件
9.1.解释
使用的某些组件本身有漏洞,如最近的Apache Log4j, 存在远程代码执行漏洞,通过构造恶意查到代码即可利用该漏洞;
10.敏感信息暴露
10.1.解释
用户的敏感信息泄漏,包括口令,密钥,个人信息…
10.2.防御措施
禁止以明文存储用户敏感信息,使用标准加密算法,带敏感数据的web页面禁止使用缓存;禁止在日志中记录敏感数据;