前端程序员必须知道的 Web 漏洞,快来看看

前端程序员必须知道的 Web 漏洞,快来看看,第1张

随着互联网的发展,早已经不是仅限于简单的网页或是社交,电商购物、银行转账、企业管理等等。上次看到一个新闻,后台程序员离职后,利用职位之便,每天还不断的给自己转账,转了好多次才被发现,想想这多可怕。或者会窃取重要的商业信息,所以 Web 安全也是非常值得注意的。

什么是 Web 安全?

黑客利用网络 *** 作系统的漏洞和 Web 服务器的 SQL 注入漏洞等,得到 Web 服务器的控制权,轻则篡改、删除、添加数据,重则窃取重要的商业信息、转账等,更严重的就是在网页中植入恶意代码,使网站受到不可预期的侵害。

常见的攻击可分为三类:XSS、CSRF、SQL注入。

Cross Site Scripting 跨站脚本攻击,为了与 CSS 区分,所以简写为 XSS 。

恶意攻击给 Web 页面植入恶意的 Script 代码,当用户浏览该网页的时候,嵌入 Web 里面的 script 代码会被执行,从而达到攻击的效果。

讲直白点,就是恶意攻击者通过在输入框处添加恶意 script 代码,用户浏览网页的时候执行 script 代码,从而达到恶意攻击用户的目的。

1.1、XSS 的危害

1.2、XSS 的攻击类型

发出请求时,XSS代码会出现在 url 中,作为输入提交到服务器端,服务器再返回给浏览器,然后浏览器解析执行 XSS 代码,这一过程像一次反射,所以称之为反射型。

这种类型的攻击,通常是把 XSS 攻击代码放入请求地址的 数据传输部分,如:

提交的 XSS 代码会存储在服务器端,如数据库、内存、文件系统内,下次请求目标页面时不再提交 XSS 代码。

文档型的 XSS 攻击不会经过服务器,作为中间人的角色,在数据传输过程中劫持到网络数据包,然后修改里面的 html 文档。

1.3、XSS 的防御措施

措施1:编码。

对这些数据进行 html entity 编码。客户端和服务器端都需要进行转义编码。

转义后为:

放入上边的代码中,还是会自动解析为上边的代码,所以放到外边。

措施2:过滤。

移除用户上传的 DOM 属性,如上边的 onerror。

移除用户上传的 style、script、iframe 节点。

措施3:利用 CSP

浏览器中的内容安全策略,就是决策浏览器加载哪些资源。

Cross site request forgery 跨站点请求伪造。

攻击者诱导受害者进入第三方网站,向被攻击网站发送跨站请求,利用被攻击者在被攻击网站已经获取的注册凭证,绕过后台的用户验证达到冒充用户对攻击网站进行的某种 *** 作。

CSRF 攻击特点:

2.1、CSRF 的危害

2.2、CSRF 的攻击类型

使用非常简单,只需要一个 http 请求。

比如页面中的一个图片添加链接,还有 iframe、script ,最容易完成 CSFR 攻击,且不易被用户发现,隐蔽性超强。

由于 get 接口是最常见的一种 CSRF 攻击类型,所以很多重要的接口不适用 get 方式,使用 post 一定程度上可以防止 CSRF 攻击。

这种类型的 SCRF 攻击,通常使用的是一个自动提交的表单。简单讲就是伪造一个自动提交的表单,一旦访问页面时,表单就会自动提交。

如:

比起前两个,这个类型的比较少见,链接类型的攻击必须要用户点击链接,才能触发。

通常在论坛中发布的图片嵌入恶意的链接,或以广告的形式诱导用户点击中招。所以我们在邮箱中看到乱七八糟的广告,尽量别点击,防止遇到三方攻击。

伪造一种新型的攻击方式,用户误以为是在网站正常登录,实际上是使用账户和密码登录到了黑客网站,这样黑客可以监听到用户的所有 *** 作,甚至知道用户的账户信息。

2.3、CSRF 的防御措施

措施1:检查 http 头部的 referer 信息

referer 包含在请求头内,表示请求接口的页面来源。

服务端通过检查 referer 信息,发现来源于外域时,就可以拦截请求,通过阻止不明外域的访问,一定程度上可以减少攻击。

措施2:使用一次性令牌

使用一次性令牌做身份识别,黑客是无法通过跨域拿到一次性令牌的,所以服务端可以通过判断是否携带一次性令牌,就可以排除一部分的非法 *** 作者。

措施3:使用验证图片

服务端生成一些文本和数字,在服务端保存这份信息,同时以图片的形式在客户端展现,让用户去合法填写信息,当 CSRF 攻击时,拿不到这个验证码的时候,无法向服务器提供这个信息,导致匹配失败,从而识别它是非法攻击者。

这个应用非常常见,之前登录的时候,需要填写图形验证码。

现在滑动图片验证也非常常见。

SQL 注入,一般发生在注册、评论、添加等,只有有用户输入的地方,就有可能发生 SQL 注入。SQL 注入是一种常见的 Web 安全漏洞,攻击者会利用这个漏洞,可以访问或修改数据,利用潜在的数据库漏洞进行攻击。

所谓SQL注入,就是通过把SQL命令插入到Web 表单 提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到 SQL注入式攻击 .

3.1、SQL 注入危害

任意的账号都可以登录,可以进行任意的 *** 作,粗暴点讲,就是随便来。

3.2、 SQL注入分类

当输入的参数为整数时,则有可能存在数字型漏洞。

当输入参数为字符串时,则可能存在字符型注入漏洞。数字型与字符型注入最大的区别在于:数字型不需要单引号闭合,而字符型一般需要使用单引号来闭合。

字符型注入最关键的是如何闭合 SQL 语句以及注释多余的代码。

其实我觉得 SQL 注入只有两种类型:数字型与字符型。很多人可能会说还有如:Cookie 注入、POST 注入、延时注入等。

的确如此,但这些类型的注入归根结底也是数字型和字符型注入的不同展现形式或者注入的位置不同罢了。

以下是一些常见的注入叫法:

3.3、SQL注入的防范措施

凡是用户输入的地方,我们都应该防止黑客攻击,永远不要相信用户的输入。所以对应的防御措施分别有:

前后端分离之后,前端每天都会接触到很多接口。发送网络请求的时候,有些接口就会使用 get 方法。最常见的传参方式就是,直接在 url 地址后面加参数。

直接采用这种方式传输数据,如果数据被劫持或抓包工具偷走之后,就会直接被人盗取走,特别危险。若是采用接口加密,如下:

上边那个看不懂的一长串符号,正是经过加密的数据。

接口加密就是将接口请求调用中传递的参数进行加密,目的就是为了保证接口请求中传递参数和返回的结果的安全性,一般比较敏感数据,如身份z、电话号码、账号、密码等需要进行加密。

常见的加密方式:

加密方式较多,可以根据自己具体的需要和项目语言选择其中一种。

加密之后的数据更安全,那我们能不能将接口所有的数据都进行加密呢?加密是非常消耗资源的,如果有大批量的数据都进行加密时,返回数据需要的时间就更长,会直接影响用户体验。所以我们进行加密时,只需要对敏感的重要的信息进行加密。

好了我今天的文章就到此结束了,本篇文章没有介绍到的 web 安全,欢迎评论区交流!

所以你正在学习如何编写代码,超越默认的  Hello World 例子,并把你的技能提高到一个新的水平。恭喜!

如果你一步步地进行编码,编码并不难,但是如果你开始新鲜的话,很难说开发者的语言。

我们要求我们顶尖的  开发者  作者就一些最重要的术语和概念向新的编码人员提供他们的忠告。这是前18名。

变量

甲  变量  是与相关联的值在整个应用程序或程序的执行而改变命名标识符。一旦在程序中定义了一个变量,在需要时可以改变该值以适应代码的流程。

常量

甲  常数  是与相关联的值,该值不整个应用程序或程序的执行改变命名标识符。与在整个应用程序的执行过程中变化和变化的变量相比,常量是固定的,不能被改变。

数据类型

一个特定类型的数据项,由它可以接受的值定义,所涉及的编程语言和/或可以在其上执行的 *** 作。常见的  数据类型 包括整数(简单数字),浮点数(基于十进制的数字),布尔值(TRUE或FALSE)和字符串(字母,数字或段落等字母数字字符串)好多其它的。

数据结构

甲  数据结构  是用于组织和在最适合的目的数据将被用于的方式存储数据的专用格式。编程中的常见数据结构包括数组,表格,记录,树等等。

对象

在面向对象的编程语言中,对象是指可以共同访问和管理的相关变量,常量,函数(也称为方法)和数据结构的组合。

范围

范围  是指   程序的一部分中的功能,方法和变量在同一程序的另一部分中的可见性。大多数语言共享两个通用作用域概念:  局部作用域  (其中可见性仅限于父函数或方法)和全局作用域 (其中可见性不受限制)。

伪代码

就像粗糙的草稿在最后的小说之前,并允许对故事的更广泛的细节进行雕刻一样,伪代码是在编写和调试实际代码之前用于概述程序的意图和流程的编程语言的简化速记。

条件语句

当代码必须选择继续的方式时,条件  处理这些决定。条件评估为TRUE或FALSE,只要条件的最终值保持单个TRUE或FALSE值,则可以将多个条件组合为单个条件。表达式的一些例子是:

my_variable <5 =“”>

(如果my_variable小于5,则最终值为TRUE)

my_var1>30 &&my_var2 == 4  (如果my_var1大于30,且my_var 2也等于4,则最终值为TRUE)

表达式

一个  表达式  是由ofvariables,数字和 *** 作的数学表达式,并解析到一个特定的值。

循环

一连串的指令不断重复(循环),直到达到一定的条件。

模块化代码

模块化代码  是将你的程序功能分离成独立的模块的概念,隐藏了它们在公共接口或API后面的内部工作。这使得每个模块的功能易于使用和重构,独立于其他任何模块使用。

API

短用于  应用程序编程接口,一个  API  是用于访问 *** 作系统,软件应用程序或实用程序的功能的程序指令集和标准。软件开发人员向公众发布其API,以便其他开发人员可以在自己的项目中利用其产品的功能和服务。

回电话

一个  回调  是一块多数民众赞成作为参数传递给其他代码语句通过可执行代码,并预计“回调”,并在特定的时间执行。同步(或  阻止)回调是即时的,而异步(或  延迟)回调意味着稍后发生。

程序化思维

程序化思维是开发人员和编程人员的核心思想,  意味着通过将大问题分解成更小的离散步骤,将特定对象描述为计算机可以理解的明确定义的值来解决这些大问题。

关闭

以最简单的形式描述  闭包   是函数中的一个函数,作为变量存储。与普通函数不同,闭包拥有一个持久的作用域,即使在你的程序移出它们定义的代码块之后,它仍然保留在局部变量中。

编译和解释语言

编译语言  (比如C,C ++和Swift)要求你编译代码并将其构建成独立的二进制应用程序,然后才能分发和运行。

解释语言 (如Python,PHP和JavaScript)是由主机上的语言解释器直接读取代码运行的,并向计算机提供指令以执行程序。

重构

代码  重构  是重构现有代码而不改变其外部行为的过程。重构通常用于改进软件的非功能区域,或者改善特定软件领域的性能或效用。

IDE

集成开发环境的简称  ,  IDE  是一种用于为特定语言开发的开发工具(或工具集合),包括代码编辑器,编译器,调试器和其他实用程序。流行的IDE包括苹果公司的Xcode,微软的Visual Studio以及IntelliJ,NetBeans和Eclipse等Java IDE。无论你的语言如何,都有一个IDE。

虽然这18个术语实际上只是开发人员的技术术语的表面,但是在您的编码之旅中,您会发现他们所代表的概念非常重要。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11326738.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存