Web项目开发中常见安全问题防范
本文章纯粹是个人收藏,其中各种也是略略了解,下面直接贴出知识点。/捂脸/捂脸
计算机程序主要就是输入/输出,安全问题由此产生,凡是有输入的地方都可能带来安全风险。根据输入的数据类型,web应用主要有数值型、字符型、文件型。
要消除风险就要对输入的数据进行检查,对于web应用来说,检查的位置主要是前端和后端。前端检查只能防止正常状况,没法防止使用工具、程序绕开检查直接把数据发送给服务器。
输入检查
防止输入注入型攻击。所有的输入数据都要检查,除了前端检查外,为防止使用工具、程序绕开前端检查直接把数据发送给服务器,后端也要检查所有输入数据。
依据产品文档的要求进行合法性检查,数值型,手机号,时间,邮箱等;
检查文本型是否含控制字符,过滤掉控制字符;
检查文本型的长度;
URL字符串转义,使用 urlencode 函数处理;
文件上传
防止文件注入型攻击。
1、文件上传目录设置成不可执行;
2、判断文件类型。结合MIME type与文件扩展名,设置文件类型白名单。对于图片文件,可以利用图片库函数深层次检查是否真是图片;
3、重命名文件名;
4、文件服务器使用独立的域名;
输出转义
防止XSS(跨站脚本攻击)。向页面输出的文本型数据进行 html encode(转义),即是将一些 html 中的特殊字符转义成普通字符,比如 & 转义成 &,< 转义成 <,"与"都要转义。对应的函数:javascriptencode,php的htmlentities。
同理xml数据包里的字符串值使用xmlencode,json数据包的字符串值使用jsonencode转义。
XSS处理
XSS的本质是HTML注入,用户输入的数据被当成Html代码执行了。
1、cookie 使用 HttpOnly 限制
使得在客户端的js代码不能读取cookie值,但是不能防止从 HTTP header里得到 cookie 值。
2、输出文本 HTML 转义
对网页上显示的文本内容使用 HtmlEncode 转义。js函数:OWASP ESAPI中的encodeCharacter。其它的如xmlencode、jsonencode等转义函数。
3、检查输入的URL
输入的 url 添加上 http: 或者 https:,然后转义输出到网页端
4、对传入js函数的文本型参数值进行 javascript 转义
先进行javascript转义再进行HTML转义
5、SQL注入
预防方法:数据与代码分离,即不用字符串拼凑SQL语句,使用SQL预处理方法(参数使用占位符?);
6、XST处理
XST(跨站追踪)攻击,关闭Web服务器的TRACE方法;
7、CSRF攻击的防御
通常需要防御CSRF(Cross-Site Request Forgeries)攻击的页面是用户登录、修改/删除确认、订单确认等添加新数据、修改数据的页面,此外此类页面必须使用 POST 方式提交。
简要描述:
CSRF(跨站/域请求伪造)攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作;
解决方法:
使用验证码(安全性最强,但影响用户体验,不建议使用);
使用同步随机token(安全性强);
在一个请求中分别在 cookie 和 post 请求数据中提交session id 并在服务端做比对(安全性较强);
检查 http 请求中 referer 的值(安全性偏强);不在 URL 中暴露 SessionId 的值,sessionId仅存在cookie中,此外为了增强安全性,在用户登录成功后生成一个新的 SessionId 的值;
8、HTTP头注入
替换HTTP头字符值中的换行符;
9、Cookie安全
Cookie 仅保存 SessionId 的值,设置HttpOnly属性为On;
10、用户密码安全
使用安全的bcrypt替代MD5,bcrypt会产生随机盐 salt
11、权限控制
①.SSO单点登录,openId系统;
②.Spring Security的实现 - 基于角色的访问控制(Role-Based Access Control)RBAC;
③.基于数据的访问控制。比如将用户Id、对象id修改成另一个存在的id,如果没有检查当前登录用户是否是参数对应的id用户,就会产生修改别的用户数据的问题,也即是越权访问;
④.OAuth授权。OAuth第三方开源库;
⑤.SessionId。sessionId加密处理;
Web项目开发中常见安全问题防范的更多相关文章
- Web项目开发中常见安全问题及防范
计算机程序主要就是输入数据 经过处理之后 输出结果,安全问题由此产生,凡是有输入的地方都可能带来安全风险.根据输入的数据类型,Web应用主要有数值型.字符型.文件型. 要消除风险就要对输入的数据进行检 ...
- Java Web项目开发中常见路径获取方法
项目绝对路径 String serverPath = request.getSession().getServletContext().getRealPath("/"); E:\J ...
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等
页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...
- web开发中常见的安全漏洞及避免方法
1.安全攻击 1.SQL.HTML.JS.OS命令注入 2.XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码 3.CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信 ...
- PHP开发中常见的漏洞及防范
PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...
- 团队项目开发中,常见的版本控制有svn,git
团队项目开发中,常见的版本控制有svn,git
- SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...
- asp.net开发中常见公共捕获异常方式总结(附源码)
本文实例总结了asp.net开发中常见公共捕获异常方式.分享给大家供大家参考,具体如下: 前言:在实际开发过程中,对于一个应用系统来说,应该有自己的一套成熟的异常处理框架,这样当异常发生时,也能得到统 ...
- 使用MyEclipse搭建java Web项目开发
转自:http://blog.csdn.net/jiuqiyuliang/article/details/36875217 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成 ...
随机推荐
- halcon区域运算
区域运算: Ø 并:union1().union2(): Ø 交:intersection(); Ø 差:difference(); Ø 补:complement():
- 在linux下用命令行编译 java的eclipse项目
由于jdk的版本问题导致在windows上编译打包好的jar包放在linux服务器上运行的时候出现一点小异常,所以决定在linux上进行一次项目编译,这有两个选择1.在相同的linux环境下安装lin ...
- fresco xml配置属性不起作用
在xml中配置加载等待图标,不起作用. 正确的如下: <?xml version="1.0" encoding="utf-8"?> <Line ...
- PI SQL 语句
insert [piarchive]..[picomp2](tag,time,value) values('ppnie_test','t',100) INSERT into pipoint..clas ...
- [IR] Concept Search and LSI
基于术语关系的贝叶斯网络信息检索模型扩展研究 LSI 阅读笔记 背景知识 提出一种改进的共现频率法,利用该方法挖掘了索引术语之间的相关关系,将这种相关关系引入信念网络模型,提出了一个具有两层术语节点的 ...
- 解决pycharm在ubuntu下搜狗输入法一直固定在左下角的问题
1.缩放VMware,当ubuntu中出现下拉导航条时,点击左上角查看>立即适应客户机,然后在pycharm中打中文的时候不用全屏,就可以看到输入法显示的文字了. 2.目前没有发现搜狗输入法版本 ...
- mysql8.0驱动问题
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</a ...
- BZOJ 1001 - 狼抓兔子 - [Dinic最大流][对偶图最短路]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 Description现在小朋友们最喜欢的"喜羊羊与灰太狼", ...
- [No000010B]Git4/9-时光机穿梭
我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容: Git is a distributed version c ...
- Xcode 10 正在编辑时 闪退
1.Xcode 10 正在编辑时 闪退 好在Xcode做了很好的及时保存机制和现场恢复措施,就算突然闪退,重新打开Xcode 还能看到之前的代码. 可以让Xcode的工程编译设置恢复成Xcode 之前 ...