一个网站的基本构成
前端:JavaScript/vue/react;
网关:nginx;
后端:Go/Java/node;
前后端交互:HTTP/WebSocket
常见的安全事件:数据泄露、服务瘫痪、成果失窃、系统劫持
一、第三方组件漏洞
防护方式
针对JAVA可以使用dependency-check-maven检查项目以来的组件是否存在安全漏洞。
二、SQL注入
定义
SQL语句静态模板和动态数据部分没有严格区分,如果在数据项中加入了某些SQL语句关键句(如SELECT、DROP),这些SQL语句就很可能在数据库写入或读取数据时得到执行。
可能导致问题的操作
1.JAVA:错误使用语言框架,或语言框架本身存在安全问题。
2.JAVA:Mybatis使用[$]构建SQL模板。
3.Golang常见错误写法
防护方式
1.尽量不要基于DB的Raw方法拼接构造SQL语句,而使用预编译、ORM框架。
2.使用ORM框架时,应注意框架中的特性,可能存在不安全的写法导致的SQL注入问题。
3.在复杂场景一定要使用拼接SQL,需要对外部输入进行转义。
三、命令控制
定义
代码中遇到需要调用某个命令才能完成的功能时候,会涉及到命令拼接,如果命令拼接没有做好安全过滤,那么将会导致命令注入风险,服务权限将会被控制。
防护方式
1.对动态的值尽可能设置白名单进行验证。
2.如果某些位置无法白名单,需要尝试对数据类型进行校验。
3.特殊字符黑名单的过滤或转义。