WEB网页的安全开发方式--目前了解到的攻击方式

最近公司刚刚进行了一个小培训,是关于web的安全开发方式,受益很大,在这里做一个记录,也跟大家分享一下。


目前了解到3种攻击方式:

①Cross Site Scripting

②SQL Injection

③数据权限问题


一、Cross Site Scripting

跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言;

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。


XSS主要分为Reflected XSS(反射型)和Stored XSS(存储型)两种

1、反射型:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS 。

比如一个网站的帮助中心搜索,如果网站安全做得不全面,搜索框输入一定规则的代码后,如:,则会执行该脚本,弹出xss框。当攻击者用这种方式在脚本中写入有攻击性的代码时,则会攻击网站,也能够获取许多如cookie类的隐秘信息。


2、储存型:存储型XSS,又称持久型XSS,他和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器的数据库和 文件中。这种攻击多见于论坛,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入到帖子的内容之中。随着帖子被论坛服务器存储下来,恶意脚本也永久地 被存放在论坛服务器的后端存储器中。当其它用户浏览这个被注入了恶意脚本的帖子的时候,恶意脚本则会在他们的浏览器中得到执行,从而受到了攻击。

以论坛来举例,当攻击者在论坛帖子评论中写入脚本,如:,则改评论则会被永久保存入数据库。这样的脚本可以获取用户信息等并发送给攻击者,当其他用户访问该帖子时,这个持久化的脚本就会执行,用户信息则会被窃取。


防范措施:

1、检测URL以将其中包含的各种编码转化为固定编码。
2、检测CSS以防止其包含javascript或expression等可执行组成。
3、将所有用户输入都进行一次转化。例如将<替换为<等。
4、检查所有的页面属性设置,以防止属性值没有被引号括起,或某些事件响应函数可以被用户输入所改变。
5、不允许用户所提供的HTML


二、SQLInjection

  SQL Injection就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。主要原因:SQL Injection 的原因主要是编写代码的时候用字符串拼接SQL,其次是没有对传入的参数的合法性进行检查,并且在数据库出错的情况直接将原始的错误信息展现在页面。

这将会导致两种情况:

1、非法执行sql语句

1)SELECT T.* FROM USER WHERE T.NAME = :NAME --->最终执行的sql  SELECT T.* FROM USER WHERE T.NAME = 'huang' 

:NAME参数左右自动加单引号。当传入参数为 huang' or 1 = 1' 时,最终执行的sql为  SELECT T.* FROM USER WHERE T.NAME = 'huang' or 1 = 1',这样就会查询出所有的用户信息。

如果传参为 huangdc'; update login set loginName = '123' where id = '1 , 这样就会将id为1的用户的登录名改为123

2、直接将原始错误展现在页面。拼接sql后,如插入或更新语句,插入一张不存在的表,则会提示表或视图不存在,攻击者就可以尝试其他表名。


防范措施:

1、不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双“-”进行转换等;
2、不要使用动态拼装SQL,可以使用参数化的SQL;
3、不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接;
4、不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。


三、数据权限问题

数据权限问题大致为权限绕过、逻辑漏洞、信息泄露几种,攻击者通过抓包获取业务请求的数据,修改包中的关键数据来达到攻击的效果,能重置任何人密码、手机号、查询用户的一些操作信息等。

同样有两种情况:

1、用户的关键信息暴露在前端,比如姓名、身份证件号码、国籍等使用隐藏域保存前端,前端提交时,将这些值回传给服务端,服务端对前端传入的这些用户关键信息未进行校验。

如某些网站的忘记密码可以通过手机号码验证进行修改密码,若将手机号码存在页面的hidden域中,发送验证码和检查验证码均从页面js中传入后台,且后台未对该手机号码是否为该用户的手机号码进行验证时,攻击者可以通过抓包获取该数据,并修改数据模拟发送请求,这将导致任意手机号码均可通过验证,从而修改用户的密码。

该情况解决方式:用户的关键信息存入session


2、查询该用户某一信息详细内容时只根据信息的ID进行查询信息。

      比如学校的成绩查询,查询2017年的所有科目成绩,成绩单有一个ID,则攻击者可以通过ID的格式,猜测其他ID查询其他用户的成绩。


防范措施:

用户的关键信息不要暴露在前端,在必要暴露在前端的时候或者需要显示用户信息,在传入后台的时候,进行业务处理或者数据库操作的时候,不能使用前端传的用户关键信息,需要从服务器端获取用户的关键信息参与业务处理,例如:

1、登录后,将用户信息保存到session中,任何表单提交需要用户关键信息时需要从session中获取用户信息进行业务或者数据库处理;
2、未登录,并且涉及到多步操作的场景,如果后一步操作需要用到前一步操作结果的,并且结果中有用户主体信息的。前一步操作结果的用户主体信息需要放到session中,并且下一步操作只能从session中获取用户信息;
3、用户主体数据查询,需要在所有查询语句带上用户主体的唯一标识。如:查询成绩传参2017年成绩单的ID,并从服务器中获取该学生的ID


作为一个小白,这些是目前我所了解到的一些安全方面经常会犯的一些问题,以后碰到新的会再增加。

你可能感兴趣的:(WEB网页的安全开发方式--目前了解到的攻击方式)