某物秋招SDL安全工程师面试
一、自我介绍
套路,我就不详细说了。
二、sql注入的原理、分类、防御(我发现这个非常常问)
就看我上篇文章“某手秋招安全工程师面试”吧,我就不重复写了。
面试官:现在给你一个java代码,你知道怎么去审计sql注入吗?
我:我直接说了我对java这块的代码了解比较少,对于php代码这块的比较熟,但是也还是按照php如何审计的思路说了一下。
三、XSS漏洞的原理,分类,防御,危害(这个也非常常问)
看我上篇文章“某手秋招安全工程师面试”吧,我也就不重复写了。
四、文件上传漏洞的原理、防御
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。
原理:
1. 文件上传漏洞是指用户上传了一个可执行的脚本文件,而web系统没有进行检测或逻辑做的不够安全。
2. 文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。
3. 一般情况下,web应用都会允许用户上传一些文件,如头像、附件等信息,如果web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等webshell,从而达到控制web网站的目的。
4. 存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传、视频、照片分享。论坛发帖和邮箱等可以上传附件的地方也是上传漏洞的高危地带,另外像文件管理器这样的功能也有可能被攻击者所利用。
防御:
1. 文件上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响。
2. 判断文件类型。在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。
3. 使用随机数改写文件名和文件路径。文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。
4. 使用安全设备防御。文件上传攻击的本质就是将恶意文件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利用行为和恶意文件的上传过程进行检测。恶意文件千变万化,隐藏手法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来帮助防御,例如:图床。
面试官:现在很多公司并不是像上传一个文本就直接能getshell的,是因为它的文件和应用是分离的,文件走的是一个对象,而不是文件形式,你可以理解成一个数据流的形式,那这种的话你有了解过一些安全的风险吗?
我:这块的话没接触过。
面试官:ok,那你刚刚还提到了上传白名单,你觉得doc文件是没有风险的,还是说可能有风险?
我:可能存在风险,据我所知,存在一个宏病毒,如果doc文件带有宏病毒,也是存在一定风险。
五、https协议是如何保证传输安全的
https协议是在http的协议基础上添加了一个SSL安全协议。https采用了对称加密+非对称加密的方式。
第一步:客户端需要向服务器发送一个连接请求,以请求建立一个HTTPS连接;
第二步:在客户端发出HTTPS连接请求之后,服务器会返回一个数字证书。数字证书中包含了服务器的公钥以及其他相关信息。客户端需要通过数字证书来验证服务器的身份和合法性。
第三步:在数字证书验证的过程中,客户端需要验证以下信息:
(1)数字证书是否为合法的数字证书,即数字证书是否由CA机构颁发。
(2)数字证书的有效期是否过期。
(3)数字证书中的信息是否和实际情况相符。
(4)数字证书中的公钥是否可以用来进行加密通信。
如果数字证书通过了验证,客户端就可以确认当前连接是一个安全的HTTPS连接。
第四步:当数字证书验证通过之后,客户端就可以和服务器建立安全的TLS连接。在TLS连接建立的过程中,客户端和服务器需要进行协商,以确定加密算法和密钥等参数。一旦协商完成,客户端和服务器就可以通过TLS连接进行加密通信。
第五步:在TLS连接建立之后,客户端和服务器可以通过TLS连接进行加密通信。TLS连接使用对称密钥加密算法来加密通信数据,同时使用非对称密钥加密算法来进行密钥交换。这样,客户端和服务器就可以通过TLS连接进行安全的加密通信,确保通信数据不被窃取或篡改。
六、我看你实习经历是关于文件泄露方面的,那你有了解过文本水印吗
当时回答了一个图像水印,稍微说了一下我的实习经历。但是我感觉面试官想要的不是这个。
七、对容器这块的安全有了解吗
知道一些常见容器的漏洞,比如apache、nginx。
面试官:那中间价的漏洞呢,像比如log4j或者java框架之类的
我:strusts和shiro漏洞。
面试官:那fastjson反序列化这块的原理有去了解过吗?
我:没去了解过。(可以参考https://blog.csdn.net/qq_53287512/article/details/127865920)
八、你平时代码写的多吗,主要是擅长哪块
java和python
面试官:那你现在能用java实现一个ssrf的防御类,对常见的url进行一个检测,拦截一些恶意的ssrf语句吗?
我所写代码如下:(不是很完善)
public static boolean isOk(String url){
String[] split = url.split("://");
String protocal=split[0];
String[] white_list={"http","https"}; //协议白名单
if(!Arrays.asList(white_list).contains(protocal)){
return false;
}
String[] split1 = split[1].split("/"); //得到域名和目录
String IP=split1[0]; //域名
String[] split2 = IP.split("."); //根据点号分割
if(split2[0].equals("10")){ //判断是不是内网地址
return false;
}else if(split2[0].equals("172")&&Integer.parseInt(split2[1])>=16&&Integer.parseInt(split2[1])<=31){
return false;
}else if(split2[0].equals("192")&&split2[1].equals("168")){
return false;
}
String[] black_list={"etc","passwd","shadow"}; //目录黑名单
for (int i = 1; i < split1.length; i++) { //如果访问了目录黑名单
if(Arrays.asList(black_list).contains(split1[i])){
return false;
}
}
return true;
}
以上就是面试的所有内容。