本文章纯粹是个人收藏,其中各种也是略略了解,下面直接贴出知识点。/捂脸/捂脸

计算机程序主要就是输入/输出,安全问题由此产生,凡是有输入的地方都可能带来安全风险。根据输入的数据类型,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项目开发中常见安全问题防范的更多相关文章

  1. Web项目开发中常见安全问题及防范

    计算机程序主要就是输入数据 经过处理之后 输出结果,安全问题由此产生,凡是有输入的地方都可能带来安全风险.根据输入的数据类型,Web应用主要有数值型.字符型.文件型. 要消除风险就要对输入的数据进行检 ...

  2. Java Web项目开发中常见路径获取方法

    项目绝对路径 String serverPath = request.getSession().getServletContext().getRealPath("/"); E:\J ...

  3. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  4. web开发中常见的安全漏洞及避免方法

    1.安全攻击 1.SQL.HTML.JS.OS命令注入 2.XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码 3.CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信 ...

  5. PHP开发中常见的漏洞及防范

    PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...

  6. 团队项目开发中,常见的版本控制有svn,git

    团队项目开发中,常见的版本控制有svn,git

  7. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

  8. asp.net开发中常见公共捕获异常方式总结(附源码)

    本文实例总结了asp.net开发中常见公共捕获异常方式.分享给大家供大家参考,具体如下: 前言:在实际开发过程中,对于一个应用系统来说,应该有自己的一套成熟的异常处理框架,这样当异常发生时,也能得到统 ...

  9. 使用MyEclipse搭建java Web项目开发

    转自:http://blog.csdn.net/jiuqiyuliang/article/details/36875217 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成 ...

随机推荐

  1. mysql解除死锁状态

    方案一: 1.查看是否有锁表 show OPEN TABLES ; 2.查询进程(如果你有SUPER权限,你可以看到所有线程.否则,只能看到你自己的线程) show processlist; 3.杀死 ...

  2. 驱动文件中只有cat/inf/dll文件,怎么安装

    网上下载了一个驱动,里面包含文件只有cat/inf/dll文件,怎么安装? 1.计算机-右键-管理-设备管理器,找到要装驱动的设备上 2.右键-更新驱动程序-浏览到本地的这个驱动文件夹 3.开始安装

  3. linux 如何快速的查找日志中你所要查找的信息

    在工作中我总会通过日志来查找相关问题,但有时候日志太多有不知道又不知道日志什么时候打印的,这时我们可以通过一下方法来查找: 1.把目录跳到你日志文件存放的地方 2.grep  关键字  *    例如 ...

  4. Eclipse 中修改tomcat设置内存大小

    修改1: 在Eclipse中下面Servers双击Tomcat Server... 然后点击General InformAtion 下的Open launch configuration: 会弹出Ed ...

  5. [DLX精确覆盖] hdu 1603 A Puzzling Problem

    题意: 给你n块碎片,这些碎片不能旋转.翻折. 问你能不能用当中的某些块拼出4*4的正方形. 思路: 精确覆盖裸题了 建图就是看看每一个碎片在4*4中能放哪些位置,这个就作为行. 列就是4*4=16个 ...

  6. iOS开发-- Xcode 6单元测试

    占坑 http://m.oschina.net/blog/377800 http://www.cnblogs.com/sunshine-anycall/p/4155649.html http://ob ...

  7. 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解

    原文:Chalarangelo  译文:IT168 https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with ...

  8. jenkins 使用curl调用时带文件参数

    最近在使用jenkins时,需要使用curl去调用,但原有的jenkins中需要有file参数,baidu查询之未找到. 特意记录下 curl -X POST http://localhost:808 ...

  9. Django之ORM版学员管理系统

    班级表 表结构 class Class(models.Model): id = models.AutoField(primary_key=True) # 主键 cname = models.CharF ...

  10. .NET学习从入门到精通100+源代码(申明:来源于网络)

    .NET学习从入门到精通100+源代码大放送 (20161128更新)(申明:来源于网络) 地址:http://download.csdn.net/album/detail/3364