关键词:
写在前面
🍁个人主页:HNUJSY
✨本期专栏:《史上最全经典面试题总结》欢迎订阅学习~
📌Xmind文件获取:GitHub 持续更新中,别忘了 star 喔~
目录
「Java学习+面试指南」思维导图,计算机自学指南,包括Java基础、JVM、数据库、mysql、redis、计算机网络、算法、数据结构、操作系统等,后台技术栈/架构师之路/全栈开发社区,阿里,腾讯,百度,美团,头条等春招/秋招/校招/面试
思维导图(png格式可下载放大)
安全
跨站脚本漏洞XSS
概念
- 在客户端发动造成攻击
- 向网页内容中写入一段恶意的脚本或者HTML代码
- 传入一段脚本
类型
- 持久型XSS
- Web邮箱、BBS、社区等从数据库读出数据的正常页面
- 非持久型
- 每次都要输入
场景
- 输出在HTML页面
- 传入的参数中带有“<”和“>”符号会被浏览器解析
- http://localhost/test.php?name=lake<!—">Enter
- 传入的参数中带有“<”和“>”符号会被浏览器解析
- 输出在JavaScript代码
- var yourname = ‘a’;alert(123456);//';
测试
- 黑盒
- 在不知道源代码的情况下通过各种技术手段对Web应用程序进行的探测
- 常见的出问题的代码是eval、 document.write、document.writeln、window.exeScript、标签的innerHTML属性、标签的src属性
- XSS测试手册(XSS Cheat Sheet)
- http://ha.ckers.org/xss.html
- 免费的软件有ProxyStrike、Paros、WebScarab等,商业的扫描器有AppScan、WebInspect
- 白盒
- 阅读代码找漏洞
- 比如PHP,就是检查echo、print函数的参数是否来自外部并且没有经过防跨站处理就直接显示到页面;对ASP来说,就是response.write之类的输出函数。
- 阅读代码找漏洞
攻击手法
-
盗取Cookie
-
在JavaScript中可以使用document.cookie来获得当前浏览器的Cookie
-
-
盗取Cookie升级版——保持会话
- 实时记录Cookie并不断刷新页面保持Session的程序——SessionKeeper
-
页面劫持——挂马和钓鱼攻击
防御跨站脚本攻击
- 处理数据
- 直接输出在页面的数据需要对“<”、“>”HTML编码: < 编码为 < > 编码为 >
- 输出在HTML属性中的数据不能让属性值被闭合。
用双引号(“)表示的属性需要编码属性值中的双引号: " 编码为”
用单引号(‘)表示的属性需要编码属性值中的单引号:
’ 编码为’
需要按照JavaScript的语法把单引号转义:
’ 转义为 ’
限制img标签的src属性始终以http://或https://开头(白名单匹配)
- 提高攻击门槛
- 设置cookie的作用域来减少cookie的暴露面
- Set-Cookie: a=123; domain=show.qq.com
- 限制cookie在某一子域名某个目录下存在,在别的目录将无法访问这个cookie:
- Set-Cookie: a=123; path=/test
- 在设置Cookie的时候,可以附加一个HTTPOnly的属性,这样的话,当浏览器向Web服务器发起请求的时就会带上cookie字段,但是在脚本中却不能访问这个cookie
- Set-Cookie: a=123; HTTPOnly;
- 在客户端防御
- firefox
- NoScript
- IE
- 把安全级别设置为高,并使用白名单只允许在信任的站点运行脚本、flash和Java小程序
- firefox
- 设置cookie的作用域来减少cookie的暴露面
防护方法
- 输入参数类型或字符的白名单判断
- 根据场景进行输入/输出转义:& ’ " < >等(以OWASP ESAPI组件为例)
- Entity标签间:ESAPI.encoder().encodeForHTML()
- Html属性:ESAPI.encoder().encodeForHTMLAttribute()
- Script代码:ESAPI.encoder().encodeForJavaScript()
- CSS style属性:ESAPI.encoder().encodeForCSS()
- 链接url的参数值:ESAPI.encoder().encodeForURL()
缓解方法
- 将Cookie设置HttpOnly
- 对json格式url设置content-type为application/javascript
其他过滤api:
- PHP:htmlspecialchars()
- java:maven组件,qq-central:xssDefence-service、qq-central:secureAPI、org.owasp.esapi:esapi
SQL注入
注入方式
- 整数型:select * from [table] where id=10 and 1=1
- 字符型:select * from [table] where id=‘10’ and ‘1’=1’
- 搜索型:select * from [table] where id like ‘%10%’ and 1=1 and ‘%’=‘%’
判断方式
- 通过构造SQL语句,改变SQL语句逻辑,观察页面返回情况来判断数据库内容;
根据不同数据库的特性可以进行从信息刺探到远程执行命令。
漏洞修复
- 对用户提交的所有表单、参数进行有效的合法性判断和非法字符过滤
- 一、如果是整数,直接int
- 二、如果是有规则的字符串,使用正则之类的手段确保是合法的(eg,如果是个md5值,那就判断是否只含有字母和数字)
- 三、如果是无规律的字符串,则使用mysql_real_escape_string来进行转移。
- 采用参数化sql的方式
- 架构上如果web不直连DB,中间加个memcache之类的缓冲层,可以从架构上彻底解决sql注入问题
- 数据库使用参数化查询,严格定义数据库用户的角色和权限
- 在服务器端进行判断和验证,禁止仅在客户端以脚本形式对客户端进行合法性判断和参数字符过滤
- 用户输入都比进行合法性校验;所有数据库SQL操作必须参数化;数据库数据查询要有权限分级和审核。
命令注入漏洞
漏洞
- 由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令
- 会允许攻击者在客户端通过改变 $PATH 或程序执行环境来执行一个恶意构造的代码,并在服务器端执行
- <?php
$log_string = $_GET[‘log’];
system(“echo “”.date(“Y-m-d H:i:s “).” “.KaTeX parse error: Expected group as argument to '\\"' at position 15: log_string."\\" ̲>> /logs/".pre.”/”.$pre.”.“.date(“Y-m-d”).”.log");
?>
- 构造xxx.php?log=`id`形式的URL
- 命令注入攻击中WEB服务器没有过滤类似system(),eval(),exec()等函数是该漏洞攻击成功的最主要原因
漏洞修复
- 禁止用户直接控制命令的执行,采用权限最小原则控制执行,并通过白名单的方式允许用户输入字符和命令
- 利用 可依赖的变量在执行赛程中构建绝对路径,防止攻击者通过修改程序运行命令的环境来控制命令的执行
- 对从配置文件和环境变量中读取出来的命令变量和路径进行校验,检查期合法性、用户及权限,避免资源被恶意篡改的情况下执行
- 在代码级调用shell的时候对命令行特殊字符进行转义(|、&、;等),防止执行其他非法命令
- PHP中可使用escapeshellarg、escapeshellcmd来转义
- 减少使用系统命令,如通过文件函数获取文件属性,而不是“ls -l <文件名>”
- 对可输入的字符范围做白名单限制
- 限制绝对路径,避免被修改PATH等环境变量带来影响
- 转义:&#;`|*?~<>^()[]$, \\x0A \\xFF ’ "
- 转义api:
- PHP:escapeshellarg();escapeshellcmd();
- 转义api:
跳转漏洞
服务端未对传入的URL变量进行控制,可以恶意构造一个恶意地址,让用户跳转到恶意网站。跳转漏洞一般用于钓鱼攻击
漏洞检测
- 修改参数中的合法URL为非法URL,包含检测是否设置过于宽松(如设置为 *.qq.com 是不允许的)
漏洞修复
- 需要经过验证的页面,可跟踪上一个页面的文件名,只有从上一页面转进来的会话才能读取这个页面。
- 仅传递一个回调url作为参数是不安全的,增加一个参数签名,保证回调url不被修改
- 对 url 参数进行校验。进行url跳转时,禁止跳转到其他非相关域名,含非公司域名及公司其他非相关业务域名
- 验证来源页面合法性、验证待跳转页面是否为公司域名
- 增加一个对待跳转url的签名参数
跨站请求伪造攻击漏洞CSRF
A打开浏览器登录了某网站test.com(此时浏览器已经有test.com的cookie),新建一个浏览器标签,打开黑客的网站hacker.com,hacker.com上有一段JS向test.com的某个CGI发送数据(这个cgi的功能是修改个人资料),由于浏览器的会话机制,它会将test.com的cookie发送出去,test.com会认为这就是用户提交过来修改资料的请求,而执行它。
分类
- CSRF写——更改设置
- 攻击载体只需要发送HTTP请求的情况
- Web应用程序在有登录态的情况下更改数据,是第三方站点只需要发送请求而不需要获得返回结果
- 攻击载体只需要发送HTTP请求的情况
- 写和读——获取敏感信息
- 攻击载体不仅要先发送HTTP请求,还要获取Web应用程序对该请求的返回内容的情况
- 有登录态的情况下会输出敏感信息,第三方站点需要发送请求并还要获得返回结果
- JSON Hijacking和flash装载网页
- 有登录态的情况下会输出敏感信息,第三方站点需要发送请求并还要获得返回结果
- 攻击载体不仅要先发送HTTP请求,还要获取Web应用程序对该请求的返回内容的情况
防御
- 请求里面有第三方不可预测(或控制)的值
- 重要操作都输入验证码
- 在特别关键的操作建议启用,其他操作建议预埋验证码,紧急时刻(如出现CSRF蠕虫)可以临时启用
- 重要操作都输入验证码
- referer是否为正常页面
- referer是可以伪造的
- Form Token
- 在输出表单的地方增加一个隐藏域,值是一个随机数,提交请求时会带上这个数,Web应用程序在后台校验,如果是第三方站点的话是无法获知这个数的
- 如果输出token的站点本身有XSS,则token就会被黑客拿到
- 在输出表单的地方增加一个隐藏域,值是一个随机数,提交请求时会带上这个数,Web应用程序在后台校验,如果是第三方站点的话是无法获知这个数的
SSRF服务端请求伪造攻击
如果应用程序对用户提供的URL和远端服务器返回的信息没有进行合适的验证和过滤,就可能存在这种服务端请求伪造的缺陷
类型
- 1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
- 2.攻击运行在内网或本地的应用程序(比如溢出);
- 3.对内网web应用进行指纹识别,通过访问默认文件实现;
- 4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
- 5.利用file协议读取本地文件等。
防御
- 1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
- 2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
- 3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。
- 4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
- 5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
史上最全软件测试工程师常见的面试题总结多测师
...手机app测试和web测试的区别?9)get请求和post请求的区别(安全性,表单)?10)怎么设计测试用例(正常和异常)?11)怎么测需求文档?XXX12)答案:静态测试,需求文档功 查看详情
2020年最新78道jvm面试题总结(含答案解析和思维导图)
前言关于JVM系列面试知识点总结了一个思维导图,分享给大家1、java中会存在内存泄漏吗,请简单描述。会。自己实现堆载的数据结构时有可能会出现内存泄露。2、64位JVM中,int的长度是多数?Java中,int类型变量的长度是一个固... 查看详情
金九银十,史上最强java面试题整理。
...is面试题及答案史上最全 55道MySQL面试题总结i++是线程安全的吗?高级Java面试通关知识点整理出场率比较高的一道多线程安 查看详情
史上最全软件测试工程师常见的面试题总结多测师
1.自动化的测试原理?2.100个用户同事发帖 XXX 你希望的团队是怎么样子的?XXX3.连接俩个字符串使用什么命令??4.SCP和SFTP的区别?5.数据库的数据类型?6.你们公司是如何评价一个软件的质量的?7.你工作几年了... 查看详情
springboot学习路线总结,跟着路线走,不迷路(附思维导图)(代码片段)
...va学习路线配套文章:搬砖工逆袭Java架构师🍅Java经典面试题大全:10万字208道Java经典面试题总结(附答案)🍅简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌、Java架构师奋斗者Ὂ 查看详情
史上最全高级java教程总结版(强烈建议收藏)
...专栏《高级java教程系列》的福利!目录java知识体系列表面试题库 java各知识点综合面试题 查看详情
史上最全高级java教程总结版(强烈建议收藏)
...专栏《高级java教程系列》的福利!目录java知识体系列表面试题库 java各知识点综合面试题 查看详情
面试总结-2023届安全面试题总汇
2023届安全面试题总汇文章目录2023届安全面试题总汇前言0x01秋招目录(随时更新)0x02各大安全厂商面试题资料链接一个2023届毕业生在毕业前持续更新、收集的安全岗面试题及面试经验分享前言最近发现一个宝贵的面试文... 查看详情
操作系统面试题总结
CS-LogN思维导图:记录专业基础面试题开源地址:https://github.com/FISHers6/CS-LogN本章节操作系统面试题导图如下:操作系统面试题操作系统引论面试题1:什么是操作系统控制和管理整个计算机系统的硬件和软件资源为用户和上层软... 查看详情
nginx面试题(史上最全+持续更新)(代码片段)
...全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送经典图书:《Java高并发核心编程(卷1)加强版》面试必备+大厂必备+涨薪必备加尼恩免费领免费赠送经典图书:《Java高并发核心编程(卷2)加强版》面试必备+大厂必备+涨薪... 查看详情
005期javase面试题:string类(代码片段)
开篇介绍大家好,我是Java最全面试题库的提裤姐,本篇文章是面试系列文章的第五篇,主要介绍了JavaSE中String相关的面试题,在之后会顺着开篇的思维导图一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着... 查看详情
android开发五年,我总结了一份android中高级开发面试题,堪称史上最全
...a转到Android五年了,在这五年间,我经历了很多次面试,也曾面试过很多人。众多求职者中,有技术水平高、面对任何问题都能侃侃而谈的,也有原理、性能、底层统统不了解、企图蒙混过关的。要知道,A... 查看详情
百度笔试题面试题总结1
目录1.树的深度优先搜索算法2.广度优先搜索算法3.链表和数组的优缺点? 查看详情
java集合面试题总结
...面试题总结1、Java中常见的集合2、容器中那些那些是线程安全的,那些不是线程安全的线程不安全线程安全3、Map接口的实现类4、Map的put过程(源码分析)5、得到一个线程安全的Map的方法6、HashMap的特点7、Jdk7和jdk8中HashMap的区... 查看详情
mybatis面试题(史上最全+不断升级)(代码片段)
...备2000页+面试必备+大厂必备+涨薪必备免费赠送经典图书:《Java高并发核心编程(卷1)》面试必备+大厂必备+涨薪必备加尼恩免费领免费赠送经典 查看详情
mybatis面试题(史上最全+不断升级)(代码片段)
...备2000页+面试必备+大厂必备+涨薪必备免费赠送经典图书:《Java高并发核心编程(卷1)》面试必备+大厂必备+涨薪必备加尼恩免费领免费赠送经典 查看详情
mybatis面试题(史上最全+不断升级)
...全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送经典图书:《Java高并发核心编程(卷1)》面试必备+大厂必备+涨薪必备加尼恩免 查看详情
java经典面试题详解:这些年我所经历的所有面试
SpringSecurity观后感——手绘思维脑(供参考)SpringSecurity手绘思维脑图手绘的思维导图,是我自己根据自身的情况读完这套阿里出品的SpringSecurity王者晋级文档之后所绘的,相当于是一个知识的总结与梳理,我将其分为***... 查看详情