面试中常见的的 web 安全问题
来源:http://www.tudoupe.com时间:2022-07-20
背景
之前出去面试的时候, 经常会被问到一些安全方面的问题。
这里涉及到很多安全问题,我只是知道一些头发,而且每次面试之前我必须寻找信息,这很麻烦。
因此,我汇编了一些我以前收集的资料和面试经验,并汇编了系统,希望能帮助大家。
「正文」
首先,简要介绍了一些常见的攻击方法:
SQL注入
XSS
CSRF
点击劫持
中间人攻击
1
SQL 注入
这是一个更简单的攻击方法。
如果后端在使用用户输入数据来组装SQL查询文时不采取预防措施,遇到一些恶意输入,最后生成的SQL会遇到问题。
举个例子

例如,地址栏输入:
为发送获取请求,需要调用查询声明如下:
通常, 该条返回 id = 1.
如果攻击者想要获取所有条目,则该句子可以更改为:
没事了,为什么?
这是因为,id = -1 永远是 false,1=1 永远是true,所有整个where语句永远是ture.
所以 where 条件相当于没有加where条件,那么查询的结果相当于整张表的内容,攻击者就达到了目的。
目前的系统通常包括过滤和验证机制,可以有效地防止SQL注入问题。
2
什么是XSS,如何预防它
XSS通常被称为跨站点脚本攻击。
攻击的目的是通过代码注入来实现.
举个例子

我们有一个社交网站,让人们互相访问彼此的空间,网站可能会做这样:

如果你使用Chrome浏览器,你会收到浏览器的警告:

类似的Chrome浏览器可以自动帮助用户保护自己免受攻击,这很好。
但这不是说,只要我使用Chrome,一切都会好的,保卫,保卫。
如何保护XSS
对于XSS攻击,通常有两种防御方法:
字符转译
CSP(Content Security Policy)
01
字符转译
实践是翻译输入和输出内容,翻译诸如引用、括号、条等字符。
攻击代码可以翻译
转译成:
更换这些字符后,恶意代码会变得无效,XSS攻击不会轻易发生。
对于一般输入, 粗略的翻译可以像上面所示进行.
在某些情况下,轻微的翻译也不够,例如:

如果链接中有一个Javascript:start协议,当点击时,浏览器会执行链接背后的代码。
目前,翻译是不需要的,需要对url协议的白色名称控制,仅允许诸如http、https、http、mailto等安全协议。
包括图像src属性 img src="{ {xss}}", iframe iframe src="{ {xss}}" 所有这些问题存在,需要处理白名单。
但是,在其他情况下, 例如, 丰富的文本, 你现在不能这样做.
这种粗糙的翻译将摧毁原始格式.
在这种情况下,更合适的策略是使用白名单来筛选标签和属性。
简单总结一下:

当我们完成翻译字符时, 让我们再看看CSP.
02
CSP
CSP , Content Security Policy 。
通过设置一个白名单,我们可以设置哪些外部资源被允许被浏览器载入。
开放CSP有两种方式:
设置HTTP头条
Content-Security-Policy设置
meta标签的方式

一旦正确的规则被配置,即使网站有漏洞,恶意代码也不会被执行。
CSP兼容性:

CSP 文档地址:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
3
CSRF
CSRF 全称是跨站请求伪造( Cross Site Request Forgery)
实质上, 它是使用用户的身份或授权秘密执行某些操作.
CSRF实际上是通过 cookie 属性进行的。
举个例子

我们登录了某个 http://tao.com 购物网站之后,cookie 就会有登录过的标记了。
此时请求http://tao.com/pay?id=123&money=1000, 是会带着 cookie 的,server 端就知道已经登录了。
如果您在http://tao.com.com请求其他域名的API,例如http://tx.当使用com/api时,它不包含cookie,这是浏览器相同的源代码策略的限制。
但是此时在其他域名的页面中,请求http://tao.com/pay?id=123&money=1000,就会带着tao.com的 cookie 。
这是CSF攻击的理论基础。
「如何捍卫 CSRF」
有效保护CSF的方法是添加层级授权验证。
例如,在今天的购物网站上,如果你处理现金交易,你必须输入密码或解密身份验证。
此外,敏感接口使用 POST请求而不是GET。
4
点击劫持
click-jacking,也被称为UI-覆盖攻击。
这也是比较常问到的一个问题,也是我们最常见的一种情况。
攻击方法是将透明的iframe层添加到某些操作的按钮上。
只要点击它,你就会陷入困境。
“ 如何防卫点击劫持 ”
常用的两种方式:
1.使用HTTP头部防御
通过配置 nginx 发送 X-Frame-Options 响应头,这个 HTTP 响应头 就是为了防御用 iframe 嵌套的点击劫持攻击。 这样浏览器就会阻止嵌入网页的渲染。
响应头有三个可选值,分别是:
DENY,表示网页不能通过iframe显示。
SAMEORIGIN,这意味着页面可以通过iframe以相同的域名显示。
ALLOW-FROM,表示该页面可以在指定的源iframe中显示。
更多细节可以在MDN上找到关于X-Frame-Options响应头条的。
2.使用JavaScript来防御
确定顶部视图域名是否与此页的域名匹配。如果它不匹配,恶意页面会自动跳到我们的页面。
5
中间人攻击
中间人攻击(英语:Man-in-the-Middle Attack,简称MITM)是网络入侵的长期手段,例如SMB对话劫持和DNS欺诈等攻击是MITM攻击的典型特征。
简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探来达到攻击的目的,而通信的双方却毫不知情。
“如何防御中路攻击”
以下是防止中间人攻击的一些建议:
确保您当前访问的网站使用HTTPS
如果你是一个网站管理员,你应该实施HSTS协议
不要通过公共Wi-Fi发送敏感数据
如果您的网站使用SSL,请确保您不使用不安全的SSL/TLS协议。
不要点击恶意链接或电子邮件。
还有一个容易忽略的脆弱性
window.opener
带有target="_blank"跳跃的网页有一个浏览器window.opener对象可以跳到原始页面,这可能会被恶意网站使用,例如,一个恶意网站将其恶意网站放置在教资会网站上,当教资会网站使用者在一个新的窗口打开网页时,恶意网站利用这个漏洞将原来的UCC网站跳到伪造的捕鱼页面上,当用户返回原始窗口时,它可能忽略浏览器URL已经更改,伪造网页可能导致进一步的捕鱼或其他恶意行为:
代码如下
想象一下,你在浏览淘宝的时候,点击了网页聊天窗口的一条外链,出去看了一眼,回来之后淘宝网已经变成了另一个域名的高仿网站,而你却未曾发觉,继续买东西把自己的钱直接打到骗子手里。
如何修复
添加rel="noopener noreferrer"属性到 target="_blank」。
缺点: 为禁止了跳转带上 referrer,目标网址没办法检测来源地址。
还有一种方法是,所有的外部链接都替换为内部的跳转连接服务,点击连接时,先跳到内部地址,再由服务器 redirect 到外部网址。
许多网站现在这样做,不仅是为了避免风险,而且是为了控制非法网站的开放:
大概就是这么多。
相关新闻
- 2023-04-16 2台电脑怎么共享(2台电脑怎么共享
- 2023-04-16 主板检测卡代码(电脑主板检测卡代
- 2023-04-16 dnf未响应(dnf未响应老是上不去)
- 2023-04-16 ppoe(pppoe拨号上网)
- 2023-04-16 网速不稳定(网速不稳定是路由器的
- 2023-04-16 wds状态(Wds状态成功)
- 2023-04-16 光标键(光标键不动了怎么办)
- 2023-04-16 电脑提速(电脑提速100倍的方法)
- 2023-04-16 切换用户(切换用户怎么切换回来
- 2023-04-16 数据包是什么(产品数据包是什么
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
