软件工程师应该关注的web攻击手段


1.SQL注入------常见的安全性问题。

   解决方案:前端页面需要校验用户的输入数据(限制用户输入的类型、范围、格式、长度),不能只靠后端去校验用户数据。一来可以提高后端处理的效率,二来可以提高后端数据的安全。

                 后端不要动态sql语句,使用存储过程查询语句。限制用户访问数据库权限。后端接受前端的数据时要过滤一些特殊字符(如:“--”等字符)

                 后端如果出现异常的话,要使用自定义错误页,防止用户通过服务器默认的错误页面找到服务器漏洞。

    java版

    安全查询(参数化查询)

 //获取参数,拆分参数
String custname = request.getParameter("customerName"); String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";
//创建连接 PreparedStatement pstmt
= connection.prepareStatement( query );
//将参数格式化 pstmt.setString(
1, custname);
//获取查询结果 ResultSet results
= pstmt.executeQuery();

     安全查询(存储过程)

//获取参数
String custname = request.getParameter("customerName");
try {
//调用数据库的存储过程 CallableStatement cs = connection.prepareCall("{call sp_getAccountBalance(?)}"); //将参数格式化
cs.setString(
1, custname);
//获取查询结果 ResultSet results
= cs.executeQuery();
} catch (SQLException se) { }

      不安全查询

 String query = "SELECT account_balance FROM user_data WHERE user_name = " + request.getParameter("customerName");
 //动态查询,直接拼接字符串
 try {
//创建连接 Statement statement
= connection.createStatement();
//获取查询结果 ResultSet results
= statement.executeQuery( query ); }

 

   PS:大多数的网站都是使用默认的错误页面。(不要建议这样做,容易暴露站点信息)

         

 

2.XSS攻击------相对复杂的安全性问题

  攻击方式:基于DOM的XSS即通过浏览器来直接运行js脚本无须提交服务器,从客户端的代码引起的。

                如:其实就是发送一个合法的地址加自己的脚本,比如:www.xxx.com/search?wd=<script>...</script>

                      受害者点击的是www.xxx.com/search?wd=<script>...</script>链接,然后受害者的浏览网页就加入这个恶意代码。

                存储XSS攻击即通过输入框提交js脚本或者上传文件到服务器,从网站的数据库引起的攻击。

                反射XSS攻击即通过url提交js脚本到服务器,从受害人的请求发起引起的攻击。

  解决方案:后端输出页面的时候需要进行转换html实体。严格过滤用户输入。如:<script> 转义成 &lt;script&gt;

 补充:前端url重定向,比如是采用sso登录模式重定向,容易出现跳转到其他域。

            比如:www.xxx.com/login?redirect=http://abc.com

            解决方案:后端针对重定向域进行判断。

            前端文件上传,比如是上传控件上传一些非指定格式的文件。

            解决方案:前后端针对文件类型进行判断。

            前端文件下载,比如是下载一些资料(doc,excel,mp4)。

            解决方案:后端严格控制文件下载的权限,限制下载文件类型,文件目录。        

 PS:xss攻击的地方很多,html、css、js都有可能会被注入威胁。

 

3.CSRF攻击------比xss攻击更危险的安全性问题

   攻击方式:受害者打开网站A,登陆网站A,网站A保存一些cookies在本地(没有关闭浏览器),受害者又打开网站B,网站B保存一些恶意cookies,并向网站A发送受害者的请求(网站B利用

受害者攻击网站A)。受害者打开网站B,网站B诱使受害者进行网站A的操作。(假官网盗取用户资料)

   解决方案:验证 HTTP Referer 字段,给用户分配token。

 

4.SSRF攻击------变种CSRF攻击的安全性问题

   攻击方式:常见于分布式站点或者分布式服务器。攻击者能巧妙绕过目标服务器的防火墙,控制目标内网的服务器,通过内部服务器与其他服务器进行交互,从而进行恶意的修改目标服务器

                     上的数据。

   解决方案:内部服务器需要设置认证帐号密码,切记默认帐号。

                     内部服务器禁用其他通信协议,只保留https/http协议。

                     内部防火墙把内部服务器的ip或者域名加入黑名单,防止内部服务器滥用发送请求。

 

5.DoS攻击------常见的具有破坏性的安全性问题(如果是分布式攻击的话就是DDos攻击)

   攻击方式:Ping Flood攻击即利用ping命令不停的发送的数据包到服务器。

                     SYN Flood攻击即利用tcp协议原理,伪造受害者的ip地址,一直保持与服务器的连接,导致受害者连接服务器的时候拒绝服务。

   解决方案:设置路由器与交换机的安全配置,即设置防火墙。(涉及到硬件问题我就不多说了,只是提醒一下)

 

6.DNS缓存污染------常见的网站不可访问的问题

   攻击方式:第三方可信赖的域名服务器缓存了一些DNS解析,但被别人制造一些假域名服务器封包污染了,指向错误网址。

   解决方案:备多个域名服务器商。

   

7.ARP欺骗------常见的窃取资料的安全性问题

   攻击方式:利用ARP欺骗,伪造成网关或目标地址,导致受害者与目标计算机都无法正常通信,让受害者的数据经过攻击者的电脑,从而抓取别人的用户信息。(仅限于局域网

   解决方案:强烈要求数据必须加密传输,启动https协议。

   PS:ARP 即 Address Resolution Protocol(地址解析协议),是一种用于接收设备MAC地址的协议。

           MAC 即 Media Access Control (媒体访问控制),用于表明设备在网络上的身份(网卡的身份号),具有全球唯一性。这里的唯一性指当前网络的网卡的身份号是唯一的,不代表MAC

                        地址不可修改,MAC地址有两种修改方式,一是硬件擦写,重新把MAC地址写进设备,二是软件修改,在系统上修改MAC地址。

 

8.中间人攻击(会话劫持)-----常见的窃取资料的安全性问题

   攻击方式:劫持会话cookies把受害者(A)与受害者(B)之间通信经过攻击者的电脑。(常见于在线聊天系统)

   解决方案:用户进行二次验证,随机产生会话ID,会话cookies设置httponly(某些情况下httponly设置无效)。

                  增加http请求头信息。判断是否是真实用户的请求。

                  使用https协议。

   PS:cookies有两种。

         会话cookies : 建立会话的cookies,关闭浏览器失效。

         持久性cookies : 持久保存本地的cookies,到期失效。

         cookies也可以进行XSS,CSRF攻击。(把恶意代码存放到cookies里面)

 

补充:因为现在大多数的web项目都采用前后端分离的模式开发。前端就通过ajax请求与后台交互,传统的sessionid保存在cookies或者是存放在url是不安全的。所以大多数的web项目都采用基于token鉴权机制来识别用户份。

 

比如JSON WEB TOKEN验证机制。

JSON WEB TOKEN(简称JWT)是一种基于json,通过http请求头中Authorization字段进行前后端身份验证的规范。此规范灵活性强,效率高,大多数现代web应用都采用这种方法进行身份验证。

JWT是由三个部分组成,分别头部、载荷与签名。 

{
  "alg": "HS256",   //消息认证码算法,当然还有其他算法。    
  "typ": "JWT"       //标记类型
}  //头部
.  //需要这个.符号  
{
  "jti": "51d84ac1-db31-4c3b-9409-e630ebbb83df", //JWT的Id
  "username": "XXX", //这个不是固定的,可以添加多个自定义字段
  "sub":"logon", //主题字段
  "nbf":"1452356445", //JWT接收时间
  "iss": "xdfsdf",  //发行主体字段
  "exp": "1452349372"  //过期时间字段
} //载荷  
.  //需要这个.符号 
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)  //签名

对应生成json字符串

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 //头部
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ  //载荷
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c  //签名

 

注意:千万不要依赖 “exp” 字段来处理token过期失效或者是管理会话状态。因为这个token是在客户端,而不在服务端。所以服务端必须保存token,即用户登录系统后,

服务端会返回一个token(token值一般由sessionId、userId等各种参数与签名算法生成,token不应该包含敏感参数,如password)给客户端,并保存一个token在缓存数

据库(如:redis),客户端每次请求带token,服务端获取token后通过加密算法生成的字符 ,然后匹配自己存放在缓存据库的token进行比较。

 

9.后门 -----常见的软件漏洞问题

   后门是指一种绕过安全性控制而获取对程序或系统访问权的方法。在软件的开发阶段,程序员常会在软件内创建后门以便可以修改程序中的缺陷。如果后门被其他人知道,

或是在发布软件之前没有删除,那么它就成了安全隐患。常见于一些热补丁更新软件。

   攻击方式:使用webshell提交恶意的动态网页到网站服务器,然后执行恶意的动态页面(如:www.XXX.xom/恶意页面.jsp)。

                     使用渗透测试工具,扫描网站服务端开放端口,访问敏感目录(上传,下载,管理后台页面),从而窃取站点的关键信息或破坏系统文件与数据。

                     使用渗透测试工具,通过目标网站所在的主机上存放的其他网站进行注入攻击。(web站点旁注攻击)

   解决方案:所有软件(配置文件,服务器,数据库等)使用必须采用强密码,禁止使用弱密码,禁止使用统一相同帐号与密码。

                     使用非对称后门接口(即非对称加密接口)进行软件更新,避免对称后门接口(即对称加密接口),给服务端程序加壳处理。

                     使用蜜罐技术。(蜜罐是指一个包含各种漏洞的系统,模拟一个或多个易受攻击的主机,给黑客提供一个容易攻击的目标。)

  补充:旁注攻击类型相对复杂,不仅仅只有web站点上旁注攻击,还有密码学上旁注攻击。

            密码学上旁注攻击是通过测量目标计算机的CPU、电源、系统缓存、wifi信号频率、故障信息、硬件运作声音、硬件运作温度,来逆推计算机传输中的加密信息的密钥,从而破解截获的

            重要信息。( 密码学上旁注攻击是种综合性强的攻击手段,唯一解决方案就是控制硬件运作频率或随机改变软件执行顺序)

            

10.爬虫攻击-----常见的非攻击性的安全性问题

    网络爬虫严格意义上不是一种web攻击手段,但却对服务器造成一定的伤害,不容忽视这种攻击。

    攻击方式:常见于搜索引擎爬虫或者一些前端测试工具,如:PhantomJs,puppeteer等,这些工具可以模拟用户操作,进行网络爬虫请求。

    解决方案:鉴别请求ip,鉴别请求次数,鉴别请求点击连接,鉴别请求数据格式,比如cookie,Referer等字段,必要时需要人工时刻监控网站情况,定期要更新前端页面结构。

    PS:以上方案都不能彻底解决网络爬虫问题,容易误伤真实用户。

 

   补充:准确判断正规爬虫与恶意爬虫。

           根据访问者的ip来查看主机域名,对于(Baiduspider、Googlebot)正规爬虫的域名加入过滤白名单,保证正规爬虫能正常对本站点进行SEO。

            

总结:当然,还用很多攻击的手段没有列出来,原因是不常见,而且已经有点偏向于网络黑客方面,与web开发方面无关。以上问题在web开发中需要值得注意的。

         解决方案只是一般防御策略,并不能彻底解决这些问题,俗话说得好,道高一尺,魔高一丈。web安全是一个长期值得研究的问题              

                 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM