网站常见安全漏洞
安全事件:数据泄露、服务瘫痪、系统劫持
服务端
第三方组件:java可以使用dependency-check-maven检查项目组件是否存在漏洞
SQL注入
错误使用语言框架,如
- mybatis-plus的危险函数inSql支持SQL拼接
- mybatis中应该使用$而不是#作为占位符,传入的是值而不是语句
- gorm中db.Order传入if
尽量不要拼接SQL,应使用预编译、ORM框架;如果必须拼接SQL,需要对外部输入进行转义
RCE远程命令执行漏洞
RCE使用命令拼接符在正常命令后面拼接恶意命令
;前后都执行
|只执行后
||前面错才执行后
&前后都执行
&&前面对才执行后
比如
ping 127.0.0.1 | net user # 查看本机用户账户
越权漏洞
- 未授权:不需要身份认证就能获取信息
- 水平越权:能够操作同级别账号
- 垂直越权:获得管理员权限
SSRF
ssrf指的是攻击者构造恶意请求,并利用服务器来向内网发送请求,可以对服务器所在内网扫描或者获取内网信息。其原因是服务端代码未对用户输入进行充分过滤,比如使用/?url=http://127.0.0.1/flag.php进行内网访问
如果过滤127.0.0.1,绕过(也就是SSRF bypass)的方法有:
- 127.0.0.1进制转换 八进制:0177.0.0.1 十六进制:0x7f.0.0.1 十进制:2130706433
- 替代 http://localhost/ http://0/ http://[0:0:0:0:0:ffff:127.0.0.1]/ http://①②⑦.⓪.⓪.① @127.0.0.1:80@www.baidu.com/flag.php绕过对内网hostname的过滤
防护:对输入的ip进行判定,建立白名单,只允许某些网站
文件上传
上传木马。限制文件类型,站库分离(文件放到CDN、OSS)
客户端
开放重定向:构造恶意链接重定向到恶意站点。对重定向进行白名单控制
XSS
- 反射型XSS:攻击者构造一个参数包含恶意js代码的URL,诱骗用户点击,用户访问后向服务器发送请求,服务器响应包含恶意代码的页面,并在客户端执行。例如服务器后端存在PHP代码
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';,参数name传入js代码后,则会在服务器生成恶意页面,然后返回给客户端执行 - 存储型XSS:攻击者通过网页的留言、评论等交互处将恶意代码注入到服务器数据库中,用户访问后浏览器会执行恶意代码
- DOM型XSS:攻击者构造一个参数包含恶意js代码的URL,诱骗用户点击,用户访问后向服务器发送请求,服务器的响应并不包含恶意代码,而是URL中的js代码直接嵌入了HTML,修改了DOM节点,在本地浏览器执行。
XSS防护:输入过滤,输出过滤,标签属性白名单,CSP通过配置限制当前站点允许请求什么资源
CSRF
利用浏览器在已登录情况下保存了会话信息,构造同源下的恶意参数。
CSRF防护:
- CSRF token:客户端每次请求需要带上一开始获得的token;
- samesite cookie禁止场景发送第三方cookie;
- 检验referer来源是否合法
点击劫持
钓鱼,诱导用户点击隐藏按钮
防护:不允许其他网站iframe嵌入我的网站,使用同源策略
CORS配置错误
CORS(Cross-Origin Resource Sharing,跨域资源共享)用于绕过SOP(同源策略)来实现跨域资源访问,WEB 应用程序可以通过在 HTTP 报文中增加特定字段Origin来告诉浏览器,哪些不同来源的服务器是有权访问本站资源。可以利用CORS漏洞来窃取用户敏感数据,CORS漏洞往往是由于配置不当,比如Access-Control-Allow-Origin: *
JSONP全称是 JSON with Padding ,是基于 JSON 格式的为解决跨域请求资源而产生的解决方案。JSONP 实现的基本原理是利用了 HTML 里 元素标签,远程调用 JSON 文件来实现数据传递。当某网站通过 JSONP 的方式来跨域(一般为子域)传递用户认证后的敏感信息时,攻击者可以构造恶意的 JSONP 调用页面,诱导被攻击者访问来达到截取用户敏感信息的目的。
CORS漏洞和JSONP劫持都属于CSRF