软件工程师应该关注的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:跨站脚本攻击 -典型实例为: 当用户在表达输入一段数据后,提交给服务端进行持久化.如果此用户输入的是一段脚本语言,而服务端 用户输入的数据没有经过转码.校验等就存入了数据库,在其他页面需要展示 ...
随机推荐
- 在CentOS7上源码安装php7--Install php7 from source on CentOS7
首先下载php源码包并解压: # wget http://cn2.php.net/get/php-7.0.9.tar.gz/from/this/mirror # .tar.gz # cd php- 然 ...
- Cannot load JDBC driver class 'com.mysql.jdbc.Driver解决方法
“Cannot load JDBC driver class 'com.mysql.jdbc.Driver ” 表示没有JDBC连接MySql的驱动包,因此需要手动添加驱动包到WEB-INF目录下的l ...
- 零基础逆向工程21_PE结构05_数据目录表_导出表
数据目录 1.我们所了解的PE分为头和节,在每个节中,都包含了我们写的一些代码和数据,但还有一些非常重要 的信息是编译器替我们加到PE文件中的,这些信息可能存在在任何可以利用的地方. 2.这些信息之所 ...
- ZOJ 3469 Food Delivery (区间DP,经典)
题意: 在x轴上有一家外卖餐馆,有n个顾客站在x轴上不同坐标上且叫了外卖,每个人的脾气不同,每1分钟没有收到外卖就会增加Fi点愤怒值,而外卖小哥的车是有速度的v-1/分钟,问怎样的送餐次序会让所有顾客 ...
- C++11 function用法 可调用对象模板类
std::function<datatype()> ()内写参数类型 datatype 代表function的返回值 灵活的用法.. 代码如下 #include <stdio.h&g ...
- Android(java)学习笔记137:ListView编写步骤(重点)
1.ListView在我们的手机android编写程序中使用是十分广泛的,比如如下图中 短信 和 手机设置 都是ListView的效果: 手机设置: 短信: 2.正因为这 ...
- [CV笔记]OpenCV机器学习笔记
KNN算法: 目的是分类,具体过程为,先训练,这个训练我估计只是对训练数据进行一个存储,knn测试的过程是根据测试样例找出与这个样例的距离最近的k个点,看这k个点中哪个分类所占的比例比较多,那么这个样 ...
- JS给数字加千位分隔符
本文原链接:https://www.jianshu.com/p/928c68f92c0c JavaScript实现千位分隔符 将普通的数字转换为带千位分隔符格式的数字字符串是一个非常常见的问题,千位分 ...
- C 语言设计坦克大战(未完成)
//坦克大战 //0.提示界面 //1.边框 //2.指定位置显示自己的坦克 //3.己方坦克随着方向键动起来 //getasynkeustae //Sleep(毫秒) //减少闪烁 //不闪烁Set ...
- Python01 VSCode开发环境和入门程序
1.Python的下载和安装 最新版本python3.7.3 https://www.python.org/downloads/release/python-373/ web-based: 在线安装包 ...