0%

2020-5-20 富途面试

非常菜的一次回答(感觉环境还不错的可惜我实力不够,丧)

题目

  1. 什么是csrf其原理及防护方法。(多次面试问到)
  2. 现有一个web网站需要进行密码账户等信息的传送,但公司只支持http(信息未加密)我们改用什么方案来进行安全的传送。
  3. ssrf和csrf区别。
  4. 现有一个被入侵了的Linux计算机,我们该如何锁定入侵者进行了哪些操作及它的ip。
  5. 给你一个ip(web站),你该如何拿到它的websehll。
  6. 你如何修复一个存在漏洞的web站。
  7. tcp/ip有哪些层。
  8. http头部有哪些重要信息。
  9. http和https的区别。
  10. xss的原理及防御。(多次问到)
  11. 理解 DOM型XSS 。
  12. sql注入的原理、防御及分类。(多次问到)
  13. 两个人往一张桌子上摆棋子,当桌子摆满时最后一个放棋子的胜,请问你怎么赢。

    整理后的回答

1、什么是csrf其原理及防护方法

【参考链接】

什么是 csrf

csrf就是说,攻击者盗用你的身份,以你的名义发送恶意请求,而且对于服务器来说这个请求是完全合法的,但攻击者已经完成了所期待的操作。比如以你的名义发送邮件、发送消息、添加管理员,甚至是购买商品、转账等。

CSRF攻击攻击原理及过程
  1. 用户A打开浏览器,访问受信任的网站B(B存在csrf漏洞)输入了用户名和密码。验证通过后 产生了 cookie 信息并返回给了浏览器,此时用户可以正常发送请求给B站点了。
  2. 而如果用户没有退出网站B之前,在同一浏览器中又打开一个页面访问了我们事先准备好了的恶意网站C。C在接收到用户请求后返回一些攻击性代码,并发出一个请求访问存在ssrf漏洞的网站B。
  3. 浏览器收到了恶意代码后,根据恶意网站C的请求在用户不知情的情况下携带Cookie信息向存在ssrf漏洞的B网站发出请求。而此时网站B不知道该请求是恶意网站C发送过来的,它会根据用户A的Cookie信息以用户A的权限处理该请求,从而导致来自网站C的恶意代码被执行。
    (所以它通常和xss一起使用。)
防御CSRF攻击
验证 HTTP Referer 字段

这种方法的缺点:

  1. 安全性都依赖于第三方(即浏览器)某些浏览器,比如 IE6 或 FF2,已经有一些方法可以篡改 Referer 值。如果网站支持IE6就需要小心了。
  2. 还有就是有些组织的用户并不愿意提供referer给网站,担心把某些信息泄漏出去。
在请求地址中添加 token 并验证

 在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
缺点:

  1. 难以保证token本身的安全。可能通过referer来得到token的值以发动csrf攻击。
  2. 对每一个请求都加token很麻烦,需要在页面生成时使用js遍历整个dom,但对于页面加载之后生成的html代码还是需要手动添加。
在 HTTP 头中自定义属性并验证

 这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。
缺点:

  1. 局限性大,不是所有请求都适合这个类( XMLHttpRequest)发起。
  2. 用户体验感差,无法前进、后退、刷新。
题外,CSRF漏洞检测

 最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
或者使用工具如:CSRFTester,其工具原理是:
抓取浏览器中访问过的所有连接以及表单信息,然后修改相应的信息重新提交,如果服务器接受了就说明存在csrf漏洞。

2、现有一个web网站需要进行密码账户等信息的传送,但公司只支持http(信息未加密)我们该用什么方案来进行安全的传送。

【参考链接 1】 【参考链接 2】

可以理解题目为,普通 http 网络下数据的安全传输

解决数据抓包被窃取

为了防止黑客抓取我们的数据包窃取我们的账号密码,我们将账号密码加密。但是黑客还是可以重放我们账号密码进行攻击,此时我们加一个时间戳就可以了。

也就是:明文+时间戳—–>加密——>解密验证

解决数据包被篡改

为了防止例如,在充值过程中,我们的账号被篡改为别人的账户类似事件发生。我们可以 添加接口签名 ,客户端在发送用户名和账户信息时,添加一个接口签名。服务器在接受参数后,首先进行签名的验证。

怎样签名呢?通常使用sign,比如原链接请求的时候加一个sign参数,sign=md5(id=1),服务器接受到请求,验证sign是否等于md5(id=1),如果等于说明正常请求。这会有个弊端,假如规则被发现,那么就会被伪造,所以适当复杂一些,还是能够提高安全性的。

解决无法判断登入状态

 http 是无状态的,也就是服务器无法自己判断两个请求是否有联系,那么登录之后,以后的接口怎么判断是否登录呢?

解决办法:Token授权机制,用户使用用户名和密码登录之后,服务器返回给客户端一个token值,并在服务器中缓存此token值。在之后的请求业务中都带上这个token,服务器接受请求后进行token验证,token是带有 有效期 的若token已经失效或者不存在在,则说明请求无效。

3、ssrf和csrf区别。

【参考链接】

csrf: 攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你的名义发送邮件,发消息,盗用你的账号,甚至于购买商品,转账。
发生条件: 1、登录受信任网站A,并在本地生成Cookie。2、在不登出A的情况下,访问危险网站B。

SSRF服务端请求伪造攻击
 A网站,是一个所有人都可以访问的外网网站,B网站是一个他们内部的网站我们无法访问。我们普通用户只可以访问a网站,不能访问b网站。但是我们可以同过a网站做中间人,访问b网站,从而达到攻击b网站需求。

4、现有一个被入侵了的Linux计算机,我们该如何锁定入侵者进行了哪些操作及它的ip。

【参考链接】
这里的记录不一定正确全面,先这么理解吧!

  1. 使用last 查看登入本机的所有用户历史记录。
  2. 进行 netstat -an 命令对系统开启的端口进行检查。
  3. 使用ps -eftop 等相关命令查看可疑进程。
  4. 使用ll /etc/passwd 查看是否有更改添加用户。
  5. 检查计划任务,通过cat /etc/crontab.
  6. 检查开机自启,/etc/rc.local的内容。

5、给你一个ip(web站), 你该如何拿到它的websehll

我的理解就是问渗透的流程。
我的回答是:

  1. 信息收集,进行whois查看注册者的邮箱姓名电话等信息。(但是whois是用需要用域名来查的),看看它开了哪些端口使用的中间件是否包含已知漏洞,遍历一下敏感目录,尝试着使用谷歌黑语法找到后台及敏感文件。
  2. 接下来就漏洞扫描,看看界面有没有什么输入框,测试一下有没有xss或者sql注入。或者其它漏洞如文件包含、命令执行等等的漏洞。
  3. 发现漏洞后就尽量利用漏洞拿到webshell。
  4. 拿到webshell后,尽量的权限提升一下。
  5. 日常记得日志清理。
  6. 总结报告及修复方案(这点应该可以不讲)。

    6、你如何修复一个存在漏洞的web站。

    其实我还是比较奇怪的,也没说什么漏洞。(:

我记得当时的回答是使用安全相关的产品,现在想想可以例举几个漏洞然后说说修复方法。

或者可以说说怎么找到这个漏洞。

7、tcp/ip有哪些层。

这因该是很简单的题目了,而我当时紧张没答全。

  1. 链路层
  2. 网络层
  3. 传输层
  4. 应用层

8、http头部有哪些重要信息。

自己总结的不一定对:

  1. Referer: 表明这个请求发起的 源头,也就是从哪个页面发来的请求。
  2. User-Agent: 是什么客户端发起的请求,经常用来做浏览器检测的userAgent。
  3. Content-Type: 返回内容的媒体类型,如text/html。
  4. Content-Encoding: 返回内容的编码,如gzip。
  5. Content-Language: 返回内容的语言。
  6. Accept-Language: 允许哪些语言。
  7. X-Forwarded-For: 判断是哪个ip发起的请求。
  8. Host: 请求的主机。
  9. cookie
  10. Client-Ip: 客户端ip。

9、http和https的区别。

https比http更安全。(有点敷衍哈)

  1. https协议需要到CA 证书,一般免费证书较少,因而需要一定费用。
  2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  3. 它们用的连接方式不同,使用的端口也不同http是80端口而https是443端口。
  4. http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
  5. HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
  6. HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。

10、xss的原理及防御。

原理

跨站脚本攻击,就是通过在css或者html里嵌入一些恶意的Javascript代码,从而实现恶意攻击的目的。

防护措施

最普遍的做法是转义输入输出的内容,对于引号,尖括号,斜杠进行转义。
仅接受规定长度、规定的格式、预期内容,其余的一律过滤。

11、怎么理解 DOM型XSS 。

先来了解一下dom,dom就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修改对应的节点,对象,值。

DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。

DOM型xss的实现过程都是在前台

12. sql注入的原理、防御及分类。

sql注入的分类也是有蛮多种划分的有理即可,贴一张图吧。

sql注入原理

插入恶意语句,就是说闭合前一句查询语句,构造恶意语句,恶意语句被代入SQL语句执行。

sql注入防御
  1. 制定黑名单:将常用的SQL注入字符写入到黑名单中。
  2. 限制查询长度:SQL注入过程中需要构造较长的SQL语句,但是效果不好以有绕过的方法。
  3. 限制查询类型:凡不符合该类型的提交就认为是非法请求。
  4. 白名单
  5. 设置数据库权限:根据程序要求为特定的表设置特定的权限。
  6. 限制目录权限
  7. 预编译、预处理
  8. 数据库信息加密

13. 两个人往一张桌子上摆棋子,当桌子摆满时最后一个放棋子的胜,请问你怎么赢。

这题有意思了,感觉和脑筋急转弯是的 (:

答:我先放棋子,将第一个棋子放在中心点上。无论第二个人放在哪里,只要第一个人放在和那个棋子(中心)对称的地方就行了


-------------本文结束感谢您的阅读-------------