Web安全面试题(一)-含解答

Web安全面试题-含解答

    • Domain
    • Ajax
    • SQLi
    • XSS
    • PHP
    • CSRF
    • HTML5
    • JAVA

Domain

1、解释一下同源策略

源:协议、域名、端口
同源:若地址中的协议、域名、端口都相同,即为同源。反之,有一者不同即为不同源。
同源策略:为浏览器的一个安全功能,不同源的客户端脚本没有明确授权的情况下,无法读写对方的资源。

2、哪些东西是可以同源获取的?

页面的链接、重定向、表单提交
跨域资源的引入,但js不能读取加载的内容,如:页面中的

利用方式:闭合引导

<script>var x = "$var";alert(/xss/);//";

4、在事件中输出
test

5、在CSS中输出

<style type="text/css">
body {background-image:url(${xss});}
body {background-image:expression(${xss});}
</style>

6、在地址中输出

<a href="http://www.evil.com/?test=$var" >test</a> 
<a href="http://www.evil.com/?test= " onclick=alert(1)"" >test</a> 
</style>
<a href="javascript:alert(1);" >test</a>
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTs8L3NjcmlwdD4=" >test</a>

2、如果给你一个XSS漏洞,你还需要哪些条件可以构造一个蠕虫?

XSS蠕虫:XSS攻击可能会造成系统中用户间的互相感染,导致整个系统用户的沦陷,能够造成这种危害的XSS漏洞成为XSS蠕虫。
1、构造一个具有自我复制的反射型XSS
2、插入评论、留言框
3、用户点击链接,链接内容指向同样的XSS向量。也就是注入了蠕虫代码的的存在存储型xss的页面。链接被点击后将继续造成蠕虫传播。

3、在社交类的网站中,哪些地方可能会出现蠕虫?

留言版
评论
文章发布

4、如果叫你来防御蠕虫,你有哪些方法?

1、将本地带有破坏性的程序改名字。
2、关闭可执行文件。
3、禁止“FileSystemObject”就可以有效的控制VBS病毒的传播。具体操作方法:用regsvr32 scrrun.dll /u这条命令就可以禁止文件系统对象。
4、开启浏览器的安全设置。

5、如果给你一个XSS盲打漏洞,但是返回来的信息显示,他的后台是在内网,并且只能使用内网访问,那么你怎么利用这个XSS?

一个公网IP、内网的目标浏览器
首先,利用XSS盲打漏洞中招(内网的目标浏览器访问网站的流量都会被定向到公网IP),此时对内网IP实施ARP攻击,在结合metasploit模块进行漏洞利用。

PHP

1、php里面有哪些方法可以不让错误回显?

php的配置文件php.ini进行了修改,display_errors = On 修改为 display_errors = off时候就没有报错提示。

在php脚本开头添加error_reporting(0); 也可以达到关闭报错的作用。

2、php.ini可以设置哪些安全特性?

禁用危险的函数 disable_functions = phpinfo, system, mail, exec

限制资源
每个脚本的最大执行时间,单位秒 max_execution_time = 30
每个脚本解析请求数据的最大时间 max_input_time = 60
每个脚本可以消耗的最大内存(8MB) memory_limit = 8M

PHP要接收的POST数据最大大小 post_max_size = 8M

是否允许HTTP文件上传 file_uploads = Off
允许上传的最大文件大小 upload_max_filesize = 2M
不将PHP错误消息暴露给外部用户 display_errors = off

启用安全模式safe_mode = On

只允许访问隔离目录中的可执行文件
safe_mode_exec_dir = php-required-executables-path

限制外部访问PHP资源
safe_mode_allowed_env_vars = PHP_

限制泄露PHP信息
expose_php = Off

记录所有错误
log_errors = On

不为输入数据注册全局
register_globals = Off

最小化允许的php post大小
post_max_size = 1K

确保PHP重定向正确
cgi.force_redirect = 0

禁止上传,除非必要
file_uploads = Off

启用SQL安全模式
sql.safe_mode = On

避免打开远程文件
allow_url_fopen = Off​

3、php的%00截断的原理是什么?

php的%00截断是php 5.2.x 版本的漏洞,当url中带有%00字符时,会自动截断后面的字符。

4、webshell检测,有哪些方法

静态检测
通过匹配特征码、特征值、危险函数来查找webshell。

动态检测
webshell被执行时表现出来的特征,称为动态特征。通过将webshell特有的http请求/响应做成特征库,然后加到IDS中去检测所有的http请求,进行动态检测。

日志检测
通过webshell在web网站的日志中的访问数据和数据提交记录,来建立请求模型,从而检测出异常文件。

语法检测
通过语法语义分析的形式,进行代码的剥离、注释,变量、函数、字符、语言结构的分析,来实现关键危险函数的捕捉。

统计学检测
由于webshell通常经过伪装(加密、编码等变换),会表现出一些特别的统计特征,通过这些统计特征建立学习模型,进行检测。

NeoPI使用的检测方法如下:
.信息熵(Entropy):通过使用ASCII码表来衡量文件的不确定性;
.最长单词(LongestWord):最长的字符串也许潜在的被编码或被混淆;
.重合指数(Indexof Coincidence):低重合指数预示文件代码潜在的被加密或被混效过;
.特征(Signature):在文件中搜索已知的恶意代码字符串片段;
.压缩(Compression):对比文件的压缩比.

5、php的LFI(本地包含漏洞)原理是什么?写一段带有漏洞的代码。手工的话如何发掘?如果无报错回显,你是怎么遍历文件的?

php的LFI的漏洞:允许用户通过在URL中包括一个文件

代码1:http://192.168.1.101/bWAPP/rlfi.php?language=lang_en.php&action=go into 192.168.1.101/bWAPP/flfi.php?language=/etc/passwd

代码2(安全级别高,无法查看PHP文件内容)
http://192.168.1.101/bWAPP/rlfi.php?language=php://filter/read=convert.base64-encode/resource=/etc/passwd

代码3(通过执行注入PHP代码来利用LFI漏洞)
http://192.168.1.101/bWAPP/rlfi.php?language=lang_en.php&action=go

通过…/ , /从目录中直接读取文件的内容

CSRF

1、CSRF漏洞的本质是什么?

跨站请求伪造,是通过劫持其他用户身份信息,进行恶意操作。

2、防御CSRF都有哪些方法,JAVA是如何防御CSRF漏洞的,token一定有用么?

防御方法:
验证HttpRefer字段
在请求地址中添加token并验证
在Http头中自定义属性并验证

token不一定有用
基于token的身份验证流程如下:
客户端使用用户名跟密码请求登录
服务端收到请求,去验证用户名与密码
验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

HTML5

1、说说HTML5有哪些新的安全特性

iframe沙箱:HTML5为iframe元素增加了sandbox属性防止不信任的Web页面执行某些操作。
CSP内容安全策略:XSS通过虚假内容和诱骗点击来绕过同源策略。
XSS过滤器:Chrome、Safari这样的现代浏览器也构建了安全防御措施,在前端提供了XSS过滤器。

2、HTML5白名单要有哪些标签

见:https://developer.mozilla.org/zh-CN/docs/Web/Guide/HTML/HTML5/HTML5_element_list

JAVA

1、你都了解哪些java框架?

常用的10大框架:SpringMVC、Spring、Mybatis、Dubbo、Maven、RabbitMQ、Log4j、Ehcache、Redis、Shiro

2、java的MVC结构都是做什么的,数据流向数据库的顺序是什么?

M:model层,数据层。 V:View,视图层,为用户提供可视化界面,并与之交互。 C:Control,控制器层,接受用户的输入,并通过调用视图层和数据层去完成用户的需求。
数据->数据库:用户通过View层填写数据,通过控制器层发送到系统后端,后端将数据传给moel层,最后流向数据库。

3、了解java沙箱吗?

JAVA沙箱的基本组成:
A·类加载体系结构
B·class文件检验器
C·内置于Java虚拟机(及语言)的安全特性
D·安全管理器及Java API

通过A、B、C的安全特性达到:保持Java虚拟机的实例和它正在运行的应用程序的内部完整性,使得它们不被下载的恶意代码或有漏洞的代码侵犯。
通过D:保护虚拟机的外部资源不被虚拟机内运行的恶意或有漏洞的代码侵犯。

4、ibats的参数化查询能不能有效的控制sql注入?有没有危险的方法可以造成sql注入?

能,SQL注入主要的是因为文本框的内容和SQL连接以后会改变SQL的语义,参数化查询就可以将这些内容独立作为参数,本身的语句不会改变。

你可能感兴趣的:(web安全)