SQL注入
原理:
1.后端未对来自用户的请求做过多过滤(或者是没做过滤);
2.数据库语句没有写死,根据用户请求动态拼接生成;
这种情况下,攻击者可以构造恶意的请求桡骨绕过检测,执行恶意SQL语句。
防御:
1.对用户的请求做严格过滤;
2.限制数据类型,如年龄修改可以只接受整型数据;
3.函数过滤转义;
4.数据库查询使用预编译机制;(预编译情况下sql语句有使用order by是可以通过case when绕过)
文件上传
原理:
服务器端未对用户上传文件做过多检测
防御:
1.白名单,只允许上传白名单内的文件;
2.目录权限设置,可写入文件的目录不赋予可执行权限,可执行的目录不可写入;
3.文件名上传后重命名等
XSS注入
原理:
攻击者在页面插入恶意的浏览器解析执行的代码如JS。常见地方:留言板、评论区。
防御:
1.当恶意代码值被作为某一标签的内容显示:在不需要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符;
2.当恶意代码被作为某一标签的属性显示,通过用 “将属性截断来开辟新的属性或恶意方法:属性本身存在的 单引号和双引号都需要进行转码;对用户输入的html 标签及标签属性做白名单过滤,也可以对一些存在漏洞的标签和属性进行专门过滤;
3.对输出的内容进行过滤,针对网站需要输出的html内容用进行关键字过滤;
4.实现Session 标记(session tokens)、CAPTCHA(验证码)系统或者HTTP引用头检查,以防功能被第三方网站所执行,对于用户提交信息的中的img等link,检查是否有重定向回本站、不是真的图片等可疑操作;
5.cookie 防盗。避免直接在cookie中泄露用户隐私,例如email、密码,等等。
CSRF
原理:
攻击者盗用了用户的身份,以受害者的名义发送恶意请求。即:登录受信任网站A,并在本地生成Cookie;在不登出A的情况下,访问危险网站B。
防御:
1.阻止外域访问,验证Origin Header, HTTP Referer 字段;
2.在请求中添加 token验证;
SSRF
原理:
利用存在漏洞的Web应用作为代理,将攻击者构造的恶意请求发送到受害的服务器,服务器请求内网资源,然后返回攻击者数据或执行指定的操作。
防御:
1.输入校验:在服务端限制URL输入参数的范围,比如只允许使用http或https协议的URL,限制URL的长度和格式等;
2.IP白名单:创建白名单,只允许访问已经列入白名单的PC或服务器,以此过滤恶意或可疑的请求地址;
3.权限控制:服务端使用更低的权限访问其他资源,而不是使用高权限去访问内网资源;
4.过滤返回信息;
5,端口限制,限制目标服务器的端口范围,防止攻击者利用漏洞访问敏感端口
XXE
原理:
XXE就是XML外部实体注入。当应用程序允许引用外部实体时,通过构造恶意内容,就有可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
防御:
1.配置XML处理器使用禁用DTD、禁止外部实体解析;
2.过滤和验证用户传入的XML数据或禁止用户上传XML文件或数据。
如果已经被入侵
1.断网,防止危害扩大;
2.查看WEB日志,攻击者如何攻破web服务器;
3.检查有无webshell,如果有网站版本管理,如git可以快速辨别哪些代码文件有变动,也可利用杀毒工具;
4.查看可疑进程,尤其是那种有网络通信的进程;查看该进程与哪些IP通信,执行过哪些系统命令;
5.停止可疑进程,有技术的还可以分析木马文件,查看其与哪些IP通信,溯源(可以结合web攻击日志、社工等);
6.修复。