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

要消除风险就要对输入的数据进行检查,对于Web应用来说,检查的位置主要是前端和后端。前端检查只能防止正常状况,没法防止通过工具、程序绕开前端检查直接把数据发送给后端。

输入检查

防止输入注入型攻击。所有的输入数据都要检查,除了前端检查外,为防止使用工具、程序绕开前端检查直接把数据发送给服务器,后端也要检查所有输入数据。

依据产品文档的要求进行合法性检查,数值型,手机号,时间,邮箱等。

检查文本型是否含控制字符,过滤掉控制字符

检查文本型的长度

Querystring中参数值字符串转义,使用urlencode函数处理

文件上传

防止文件注入型攻击。

1、文件上传目录设置成不可执行

2、判断文件类型。结合MIME type与文件扩展名,设置文件类型白名单。对于图片文件,可以利用图片库函数深层次检查是否真是图片。

3、重命名文件名。

4、文件服务器使用独立的域名。

输出转义

防止XSS(跨站脚本攻击)。向页面输出的文本型数据进行html encode(转义),即是将一些html中的特殊字符转义成普通字符,比如 & 转义成 &amp; ,< 转义成 &lt;,'与"都要转义。对应的函数: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转义。

总结如下

SQL注入

预防办法:数据与代码分离,即不用字符串拼凑SQL语句,使用SQL预处理方法(参数使用占位符 ?)。

XST处理

XST(跨站追踪)攻击,关闭Web 服务器的TRACE方法。

CSRF攻击的防御

通常需要防御CSRF(Cross-Site Request Forgeries)攻击的页面是用户登录、修改/删除确认、订单确认等添加新数据、修改数据的页面,此外此类页面必须使用POST方式提交。

HTTP头注入

替换HTTP头字符值中的换行符。

Cookie安全

Cookie仅保存SessionId值,设置HttpOnly属性为On,

用户密码安全

1、使用安全的bcrypt替代MD5(MD5本来用于生成指纹,用来做加密算法是误用),bcrypt会产生随机盐 salt

权限控制

1、SSO单点登录。OpenID系统

2、Spring Security的实现-基于角色的访问控制(Role-Based Access Control)RBAC

3、基于数据的访问控制。比如将用户id、对象id修改成另一个存在的id,如果没有检查当前登录用户是否是参数对应的id用户,就会产生窜改另一个用户数据的问题,也即是越权访问。

4、OAuth授权。OAuth第三方开源库

5、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. ElementUI组件库常见方法及问题汇总(持续更新)

    本文主要介绍在使用ElementUI组件库的时候,常遇见的问题及使用到的方法,汇总记录便于查找. 1.表单 阻止表单的默认提交 <!-- @submit.native.prevent --> ...

  2. js基本数据类型和引用类型的区别详解-笔记

    原文参考http://mp.weixin.qq.com/s/apFyUgqT5N-bsDUjP4Eryg 笔记总结 首先记住js中的基础数据类型undefined,null,boolean,strin ...

  3. 02_NIO简单实例

    [一个用NIO实现的客户端向服务端单向通信的例子] [服务端程序] package com.nio.test; import java.io.IOException; import java.net. ...

  4. 在Datagridview中添加datagridviewComboBox列并显示下拉列表

    在DataGridView中自动的添加Column. private void button_autoAddColumn_Click(object sender, EventArgs e) { try ...

  5. data-* 自定义数据属性 遇到的坑

    除非data-*自定义数据属性的值是固定不变的,否则最好不要把data-*作为查询条件. 例子: <div data-index="0">hello</div&g ...

  6. python mqtt client publish操作

    使用Python库paho.mqtt.client 模拟mqtt client 连接broker,publish topic. #-*-coding:utf-8-*- import paho.mqtt ...

  7. sqlserver中循环生成记录

    declare @i int set @i=1 while(@i<=10) begin INSERT INTO [BMData].[dbo].[QueryBlackListLogs] ([ID] ...

  8. ORACLE 收集统计信息

    1.     理解什么是统计信息优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划.优化器统计信息包括: ·        ...

  9. LESS嵌套中的Mixins和classes

    less的嵌套规则对于有效组织你的css代码有较好的作用.其中使用mixin或者class都可以作为被嵌套的实体,但是二者还是有区别的: mixin必须由.name+(){}的pattern来定义,而 ...

  10. Hadoop HA集群的搭建

    HA 集群搭建的难度主要在于配置文件的编写, 心细,心细,心细! ha模式下,secondary namenode节点不存在... 集群部署节点角色的规划(7节点)------------------ ...