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安全是一个长期值得研究的问题

软件工程师应该关注的web攻击手段的更多相关文章

  1. 软件工程师应该关注的web加密手段

    加密算法 1.非对称加密(公开密钥加密)       公开密钥加密,是加密和解密使用不同密钥的算法,广泛用于信息传输中. 常见的算法有:RSA.ElGamal.Rabin. 2.对称加密       ...

  2. 几种常见web攻击手段及其防御方式

    XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS web安全系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 XSS 概念 全称是跨站脚本攻击(Cross ...

  3. 总结几种常见web攻击手段及其防御方式

    本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS web安全系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 ...

  4. 常见的Web攻击手段,拿捏了!

    大家好,我是小菜. 一个希望能够成为 吹着牛X谈架构 的男人!如果你也想成为我想成为的人,不然点个关注做个伴,让小菜不再孤单! 本文主要介绍 互联网中常见的 Web 攻击手段 如有需要,可以参考 如有 ...

  5. 简单总结几种常见web攻击手段及其防御方式

    web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...

  6. 简单地总结几种常见web攻击手段及其防御方式

    web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...

  7. 安全|常见的Web攻击手段之CSRF攻击

    对于常规的Web攻击手段,如XSS.CRSF.SQL注入.(常规的不包括文件上传漏洞.DDoS攻击)等,防范措施相对来说比较容易,对症下药即可,比如XSS的防范需要转义掉输入的尖括号,防止CRSF攻击 ...

  8. 互联网安全架构之常见的Web攻击手段及解决办法

    一.Web 安全常见攻击手段 XSS(跨站脚本攻击) SQL 注入 CSRF(跨站请求伪造) 上传漏洞 DDoS(分布式拒绝服务攻击)等 二.攻击手段原理及解决方案 1.XSS攻击 原理:XSS 攻击 ...

  9. 常见的web攻击手段

    XSS:跨站脚本攻击 -典型实例为: 当用户在表达输入一段数据后,提交给服务端进行持久化.如果此用户输入的是一段脚本语言,而服务端 用户输入的数据没有经过转码.校验等就存入了数据库,在其他页面需要展示 ...

随机推荐

  1. 使用AuthToken架构保护用户帐号验证Cookie的安全性

    在项目或者网站开发中,我们很多人很多时候喜欢使用微软的FormsAuthentication类的GetAuthCookie函数生成需要在访客客户端放置的帐号校验Cookie,这个本身没问题,但是很多人 ...

  2. github入门之更改提交操作--6

    1.回溯历史版本 1.1.回溯到创建feature-A分支前 1.1.1.要让仓库的HEAD.暂存区.当前工作树回溯到指定状态,需要用到提供目标时间点的哈希值 1.1.2.回溯至未创建feature- ...

  3. CAS 配置NLB 负载均衡网络无法连接

    在虚拟机与虚拟机.虚拟机与实机之间利用Windows操作系统自带的网络负载均衡功能如选择单播集群模式,网络就无法通讯,NLB不成功. Scenario #1 在虚拟机与虚拟机之间选择多播模式NLB可正 ...

  4. DA层(数据访问层)的方法不用静态的

    1.静态方法,不会经过构造函数,所以你不能通过构造函数来初始参数,你只能通过传递参数,来初始他当你有多种参数需要传递的时候,你就要不断重载他了.当然你可以用参数型的类型,不过如果参数有一定结构,就很麻 ...

  5. HDU 4283 You Are the One (区间DP,经典)

    题意: 某校举行一场非诚勿扰,给定一个出场序列,表示n个人的屌丝值,如果他是第k个出场的,他的不满意度为(k-1)*diao[i].为了让所有人的屌丝值之和更小,导演设置一个栈,可以将部分人装进栈中, ...

  6. BZOJ 2654: tree Kruskal+二分答案

    2654: tree Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1863  Solved: 736[Submit][Status][Discuss ...

  7. 通用的flash代码

    黑体字部分为常修改的部分 <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase=&quo ...

  8. 剑指offer58 二叉树的下一个结点

    自己写的 class Solution { public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode == NULL) return ...

  9. 最全面的 python 字符串拼接总结(带注释版)

    在 Python 中字符串连接有多种方式,这里简单做个总结,应该是比较全面的了,方便以后查阅. 加号连接 第一种,通过+号的形式: >>> a, b = 'hello', ' wor ...

  10. 【转载】Alpha、Beta、RC、GA版本的区别

    转自:http://www.blogjava.net/RomulusW/archive/2008/05/04/197985.html Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只 ...