软件工程师应该关注的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>
转义成 <script>
补充:前端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攻击手段的更多相关文章
- 软件工程师应该关注的web加密手段
加密算法 1.非对称加密(公开密钥加密) 公开密钥加密,是加密和解密使用不同密钥的算法,广泛用于信息传输中. 常见的算法有:RSA.ElGamal.Rabin. 2.对称加密 ...
- 几种常见web攻击手段及其防御方式
XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS web安全系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 XSS 概念 全称是跨站脚本攻击(Cross ...
- 总结几种常见web攻击手段及其防御方式
本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS web安全系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 ...
- 常见的Web攻击手段,拿捏了!
大家好,我是小菜. 一个希望能够成为 吹着牛X谈架构 的男人!如果你也想成为我想成为的人,不然点个关注做个伴,让小菜不再孤单! 本文主要介绍 互联网中常见的 Web 攻击手段 如有需要,可以参考 如有 ...
- 简单总结几种常见web攻击手段及其防御方式
web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...
- 简单地总结几种常见web攻击手段及其防御方式
web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...
- 安全|常见的Web攻击手段之CSRF攻击
对于常规的Web攻击手段,如XSS.CRSF.SQL注入.(常规的不包括文件上传漏洞.DDoS攻击)等,防范措施相对来说比较容易,对症下药即可,比如XSS的防范需要转义掉输入的尖括号,防止CRSF攻击 ...
- 互联网安全架构之常见的Web攻击手段及解决办法
一.Web 安全常见攻击手段 XSS(跨站脚本攻击) SQL 注入 CSRF(跨站请求伪造) 上传漏洞 DDoS(分布式拒绝服务攻击)等 二.攻击手段原理及解决方案 1.XSS攻击 原理:XSS 攻击 ...
- 常见的web攻击手段
XSS:跨站脚本攻击 -典型实例为: 当用户在表达输入一段数据后,提交给服务端进行持久化.如果此用户输入的是一段脚本语言,而服务端 用户输入的数据没有经过转码.校验等就存入了数据库,在其他页面需要展示 ...
随机推荐
- 判断浏览器是pc端还是移动端
var browser = { versions: function() { var u = navigator.userAgent, app = navigator.appVersion; retu ...
- iOS VIPER架构(一)
洋葱模型 洋葱模型,是从冰山模型上演变而来的,用来进行层次分析的模型,这是Redux的洋葱模型. action从最外层传入,层层传递直至核心后,经过逐层事件触发,再次被分发出来,执行后续操作. 洋葱模 ...
- ucos-ii核心算法分析(转)
μC/OS-Ⅱ是一种免费公开源代码.结构小巧.具有可剥夺实时内核的实时操作系统.其 内核提供任务调度与管理.时间管理.任务间同步与通信.内存管理和中断服务等功能.适合小型控制系统,具有执行效率高.占用 ...
- UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)
非常适合A*的一道题. 比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量. #include<cstdio> #include<cstring> #include< ...
- Linux 备份
备份之前的准备工作 安装常用的软件 常用软件的安装,见我另一篇blog Ubuntu 16.04 安装札记 的第四部分. 清理系统中没用的垃圾 至于垃圾清理,主要清理对象有 sudo rm -r ~/ ...
- intellij idea自定义快捷键
intellij idea自定义快捷键比较简单,自带. 首先进入idea,File-->Settings-->Live Templates. 点击右上方的“+”,第一次需要创建一个分组. ...
- 用户输入和while循环
函数input()的工作原理 message=input('Tell me something,and I will repeat it back to you:') print(message) 编 ...
- mina架构在JT/T808协议应用程序中的应用
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务.虚拟机管道通信服务等),M ...
- java String中的replace(oldChar,newChar) replace(CharSequence target,CharSequence replacement) replaceAll replaceFirst 面试题:输入英文语句,单词首字符大写后输出 char String int 相互转换
package com.swift; import java.util.Scanner; public class FirstChat_ToCaps_Test { public static void ...
- 浅谈JavaScript中的正则表达式(适用初学者观看)
浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...