Table des matières
2. XSS" >2. XSS
你输入的内容: {{{text}}}h2>
Maison Opération et maintenance Sécurité Questions courantes d'entretien sur la sécurité Web (partager)

Questions courantes d'entretien sur la sécurité Web (partager)

Nov 29, 2019 pm 05:37 PM
web安全 面试

之前出去面试的时候, 经常会被问到一些安全方面的问题。安全涉及的领域很大, 我也仅仅是了解一些皮毛, 每次面试前都要找资料复习, 很麻烦。所以我就根据之前搜集的一些资料和面试的经验,系统的梳理了一下,希望对大家有所帮助。

Questions courantes d'entretien sur la sécurité Web (partager)

首先简单介绍几种常见的攻击方式:

1、SQL注入

2、XSS

3、CSRF

4、点击劫持

5、中间人攻击

1. SQL 注入

这是一种比较简单的攻击方式。

如果后台人员使用用户输入的数据来组装SQL查询语句的时候不做防范, 遇到一些恶意的输入, 最后生成的SQL就会有问题。

Questions courantes dentretien sur la sécurité Web (partager)

比如地址栏输入的是:

articlrs/index.php?id=1

发送一个get请求, 调用的查询语句是:

sql = "SELECT * FROM articles WHERE id =", $id

正常情况下, 返回 id = 1 的文章。

如果攻击者想获得所有的文章,语句就可以改成:

articlrs/index.php?id=-1 OR 1 = 1

这样就可以了, 为什么呢?

这是因为,id = -1 永远是 false,1=1 永远是true,所有整个where语句永远是ture.

所以 where 条件相当于没有加where条件,那么查询的结果相当于整张表的内容,攻击者就达到了目的。

现在的系统一般都会加入 过滤 和  验证 机制, 可以有效预防SQL注入问题。

2. XSS

XSS 全称是跨站脚本攻击

通过代码注入的方式来达到攻击的目的。

Questions courantes d'entretien sur la sécurité Web (partager)

我们有个社交网站,允许大家相互访问空间,网站可能是这样做的:

Copier après la connexion
           input>  form>

你输入的内容: {{{text}}}h2>

Questions courantes dentretien sur la sécurité Web (partager)

如果你用的是Chrome浏览器, 会得到来自浏览器的警告:

Questions courantes dentretien sur la sécurité Web (partager)

Chrome 这类浏览器能自动帮助用户防御攻击, 很贴心。

但是也不是说, 只要我用Chrome就万事大吉了,该防御, 还得防御。

Questions courantes d'entretien sur la sécurité Web (partager)

对于 XSS 攻击,通常来说,有两种方式可以防御:

1、字符转译

2、CSP(Content Security Policy)

1.字符转译

做法就是转义输入输出的内容,对于引号、尖括号、斜杠等字符进行转义。

& 替换为:&
<p>通过转义可以将攻击代码 :</p><pre class="brush:php;toolbar:false"><script>alert(&#39;1&#39;)script></script>
Copier après la connexion

转译成:

<script>alert(1)</script>
Copier après la connexion

替换了这些字符之后,恶意代码就会失效,XSS 攻击将不会轻易发生。

对于一般的输入, 可以像上面那样粗暴的转译。

有些情况, 光转译也是不够的,比如:

<a>点我a></a>
Copier après la connexion

Questions courantes dentretien sur la sécurité Web (partager)

链接中如果存在 javacript: 开头的协议,点击链接时浏览器会执行后面的代码。

这个时候光转义是没有用的,需要对 url 协议进行白名控制,只允许 http, https, http, mailto安全协议

包括图片 src 属性 img src="{{xss}}", iframe iframe src="{{xss}}" 都会存在这样的问题,都需要白名单处理

但是别的一些情况, 比如,富文本,这时候就不能这么干了。

如此粗暴的转译会破坏掉原有的格式

这种情况, 比较合适的策略是使用白名单进行过滤标签属性

简单总结一下:

Questions courantes dentretien sur la sécurité Web (partager)

说完字符转译, 我们再看看CSP。

2.CSP

CSP , Content Security Policy

本质也是白名单,通过设置白名单, 我们可以设置允许浏览器加载哪些外部资源

要开启CSP可以通过两种方式:

1、设置 HTTP Header 中的 Content-Security-Policy

2、设置 meta 标签的方式

Questions courantes dentretien sur la sécurité Web (partager)

只要配置了正确的规则,那么即使网站存在漏洞,恶意代码也不会被执行。

CSP的兼容性:

Questions courantes dentretien sur la sécurité Web (partager)

CSP 文档地址:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy

3. CSRF

CSRF  全称是跨站请求伪造( Cross Site Request Forgery)

本质上, 说白了就是借用用户的身份权限偷偷的完成某些操作。

CSRF 的发生其实是借助了 cookie 的特性。

Questions courantes d'entretien sur la sécurité Web (partager)

我们登录了某个 http://tao.com 购物网站之后,cookie 就会有登录过的标记了。

此时请求http://tao.com/pay?id=123&money=1000, 是会带着 cookie 的,server 端就知道已经登录了。

如果在http://tao.com去请求其他域名的 API ,  例如http://tx.com/api时,是不会带 cookie 的,这是浏览器同源策略的限制。

但是此时在其他域名的页面中,请求http://tao.com/pay?id=123&money=1000,就会带着tao.com的 cookie 。

这是发生 CSRF 攻击的理论基础。

如何防御CSRF

防御CSRF 有效的手段就是加入各个层级的权限验证.

例如现在的购物网站,只要涉及现金交易,肯定要输入密码或者扫码验证才行。

除此之外,敏感的接口要使用POST请求而不是GET.

4.点击劫持

click-jacking,也被称为UI-覆盖攻击

这也是比较常问到的一个问题,也是我们最常见的一种情况。

攻击方式就是在某些操作的按钮上加一层透明的iframe

点击一下, 就入坑了。

如何防御点击劫持

常用的两种方式:

1. 使用 HTTP 头防御

通过配置 nginx 发送 X-Frame-Options 响应头.

这个 HTTP 响应头 就是为了防御用 iframe 嵌套的点击劫持攻击。

这样浏览器就会阻止嵌入网页的渲染

该响应头有三个值可选,分别是:

  1. DENY,表示页面不允许通过 iframe 的方式展示。
  2. SAMEORIGIN,表示页面可以在相同域名下通过 iframe 的方式展示。
  3. ALLOW-FROM,表示页面可以在指定来源的 iframe 中展示。

更详细的可以查阅 MDN 上关于 X-Frame-Options 响应头的内容。

2. 使用 Javascript 防御

判断顶层视口的域名是不是和本页面的域名一致,如果不一致就让恶意网页自动跳转到我方的网页。

if (top.location.hostname !== self.location.hostname) {    
    alert("您正在访问不安全的页面,即将跳转到安全页面!")   
    top.location.href = self.location.href;
 }
Copier après la connexion

5. 中间人攻击

中间人攻击(Man-in-the-Middle Attack, MITM)是一种由来已久的网络入侵手段.

如 SMB 会话劫持、DNS 欺骗等攻击都是典型的MITM攻击。

简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改嗅探来达到攻击的目的,而通信的双方却毫不知情。

如何防御中间人攻击

以下是针对防止中间人攻击的一些建议:

1、确保当前你所访问的网站使用了HTTPS

2、如果你是一个网站管理员,你应当执行HSTS协议

3、不要在公共Wi-Fi上发送敏感数据

4、如果你的网站使用了SSL,确保你禁用了不安全的SSL/TLS协议。

5、不要点击恶意链接或电子邮件。

还有一个容易被<span style="font-size: 20px;">忽略</span>的漏洞

window.opener

带有 target="_blank" 跳转的网页拥有了浏览器 window.opener 对象赋予的对原网页的跳转权限,这可能会被恶意网站利用.

例如一个恶意网站在某 UGC 网站 Po 了其恶意网址,该 UGC 网站用户在新窗口打开页面时,恶意网站利用该漏洞将原 UGC 网站跳转到伪造的钓鱼页面,用户返回到原窗口时可能会忽视浏览器 URL 已发生了变化,伪造页面即可进一步进行钓鱼或其他恶意行为:

代码如下:

<script>
  window.opener.location = &#39;https://example.com&#39;
script></script>
Copier après la connexion

想象一下,你在浏览淘宝的时候,点击了网页聊天窗口的一条外链,出去看了一眼,回来之后淘宝网已经变成了另一个域名的高仿网站,而你却未曾发觉,继续买东西把自己的钱直接打到骗子手里。

如何修复

为 target="_blank" 加上 rel="noopener noreferrer" 属性。

<a>外跳的地址a></a>
Copier après la connexion

缺点:  为禁止了跳转带上 referrer,目标网址没办法检测来源地址

还有一种方法是,所有的外部链接都替换为内部的跳转连接服务,点击连接时,先跳到内部地址,再由服务器 redirect 到外部网址。

现在很多站点都是这么做的, 不仅可以规避风险,还可以控制非法站点的打开:

"/redirect?target=http%3A%2F%2Fxxx.yyy.com">
http://xxx.yyy.com

大概就是这么多。

总结

上文介绍了了一些常见的前端安全方面的知识及如何防御这些攻击,应对面试的话,基本上也算够用了。

安全的领域很大,上面我只是粗浅的介绍了一个方面,如果大家对于安全这一块有兴趣的话,可以找一些相关资料继续研究。

文中若有谬误, 还请各位大佬指正。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Parlons de la façon de choisir la meilleure image Docker Node.js ? Parlons de la façon de choisir la meilleure image Docker Node.js ? Dec 13, 2022 pm 08:00 PM

Le choix d'une image Docker pour Node peut sembler trivial, mais la taille et les vulnérabilités potentielles de l'image peuvent avoir un impact significatif sur votre processus CI/CD et votre sécurité. Alors, comment choisir la meilleure image Docker Node.js ?

Comment résoudre les problèmes cross-domaines ? Une brève analyse des solutions courantes Comment résoudre les problèmes cross-domaines ? Une brève analyse des solutions courantes Apr 25, 2023 pm 07:57 PM

Le cross-domaine est un scénario souvent rencontré en développement, et c'est également une question souvent abordée lors des entretiens. La maîtrise des solutions interdomaines communes et des principes qui les sous-tendent peut non seulement améliorer notre efficacité de développement, mais également mieux performer lors des entretiens.

Questions d'entretien Java JPA sélectionnées : Testez votre maîtrise du framework de persistance Questions d'entretien Java JPA sélectionnées : Testez votre maîtrise du framework de persistance Feb 19, 2024 pm 09:12 PM

Qu’est-ce que JPA ? En quoi est-ce différent de JDBC ? JPA (JavaPersistence API) est une interface standard pour le mappage objet-relationnel (ORM), qui permet aux développeurs Java d'utiliser des objets Java familiers pour faire fonctionner des bases de données sans écrire de requêtes SQL directement sur la base de données. JDBC (JavaDatabaseConnectivity) est l'API standard de Java pour la connexion aux bases de données. Elle oblige les développeurs à utiliser des instructions SQL pour faire fonctionner la base de données. JPA encapsule JDBC, fournit une API plus pratique et de niveau supérieur pour le mappage objet-relationnel et simplifie les opérations d'accès aux données. Dans JPA, qu’est-ce qu’une entité ? entité

Un article pour comprendre le modèle singleton en JavaScript Un article pour comprendre le modèle singleton en JavaScript Apr 25, 2023 pm 07:53 PM

Le modèle JS singleton est un modèle de conception couramment utilisé qui garantit qu'une classe n'a qu'une seule instance. Ce mode est principalement utilisé pour gérer les variables globales afin d'éviter les conflits de noms et les chargements répétés. Il peut également réduire l'utilisation de la mémoire et améliorer la maintenabilité et l'évolutivité du code.

Collection de questions d'entretien sur le cadre Golang Collection de questions d'entretien sur le cadre Golang Jun 02, 2024 pm 09:37 PM

Le framework Go est un ensemble de composants qui étendent les bibliothèques intégrées de Go, fournissant des fonctionnalités prédéfinies (telles que le développement Web et les opérations de base de données). Les frameworks Go populaires incluent Gin (développement Web), GORM (opérations de base de données) et RESTful (gestion des API). Le middleware est un modèle d'intercepteur dans la chaîne de traitement des requêtes HTTP et est utilisé pour ajouter des fonctionnalités telles que l'authentification ou la journalisation des requêtes sans modifier le gestionnaire. La gestion des sessions maintient l'état de la session en stockant les données utilisateur. Vous pouvez utiliser gorilla/sessions pour gérer les sessions.

Comment utiliser Nginx pour sécuriser les applications Web et réduire la surface d'attaque Comment utiliser Nginx pour sécuriser les applications Web et réduire la surface d'attaque Jun 10, 2023 am 08:36 AM

Ces dernières années, avec la popularité continue des applications Web et l'augmentation du nombre d'utilisateurs, le risque que les applications Web subissent des attaques réseau augmente. Les pirates exploitent les vulnérabilités pour tenter d'envahir et de détruire les applications Web, ce qui peut entraîner de graves conséquences telles qu'une fuite de données, une paralysie du serveur, une infection par des logiciels malveillants et des pertes financières. Pour protéger les applications web et réduire la surface d’attaque, Nginx est une excellente solution. Nginx est un logiciel de serveur Web open source hautes performances qui peut agir comme un équilibreur de charge Web, un serveur proxy inverse et H

Application des modules Nginx et des types d'objets à la sécurité Web Application des modules Nginx et des types d'objets à la sécurité Web Jun 10, 2023 am 09:33 AM

Avec le développement d’Internet et des applications Web, la sécurité des réseaux est devenue un sujet important. Le risque croissant de problèmes de sécurité des applications Web a fait de la sécurité une priorité absolue pour les développeurs et les administrateurs de sites Web. Dans cet environnement, les modules et types d'objets Nginx jouent un rôle essentiel dans la sécurité Web. Nginx est un serveur Web et un serveur proxy inverse hautes performances. Il peut gérer des milliers de connexions simultanées en même temps et présente les avantages d'une faible consommation de ressources, d'une stabilité et d'une évolutivité élevées. Nginx

Comment JavaScript détermine-t-il le type de données ? 8 façons de partager Comment JavaScript détermine-t-il le type de données ? 8 façons de partager Feb 16, 2023 pm 02:48 PM

Comment JavaScript détermine-t-il le type de données ? Cet article partagera avec vous 8 façons d'utiliser JS pour déterminer le type de données, ce qui peut faciliter efficacement le travail et les entretiens. L'intervieweur a légèrement souri après l'avoir lu.

See all articles