计算机程序主要就是输入数据 经过处理之后 输出结果,安全问题由此产生,凡是有输入的地方都可能带来安全风险。根据输入的数据类型,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. 多实例部署多个tomcat

    注意点: 1.多实例tomcat的更新维护,需要考虑如何能“优雅”地对所有实例进行升级: 2.尽量不要影响应用程序,在更新tomcat时,一不小心就把conf目录等全部覆盖,所以尽量要把配置文件和安装 ...

  2. 小白学flask之hello,world

    from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "He ...

  3. docker镜像使用和总结

    一.Docker镜像是什么? 操作系统分为内核和用户空间.在Linux中,内核启动后会挂载 root 文件系统为其提供用户空间支持. docker镜像就相当于一个 root文件系统.比如:官方镜像ub ...

  4. struts1 & jquery form 文件异步上传

    1.概述 还在用struts1?是的,在地球的没写地方,落后的生产方式还在运转(老项目). 从 继承org.apache.struts.action.Action, 继承org.apache.stru ...

  5. IE6 行内定义成块元素后高度失效

    问题描述: ie6下,空标签块元素height定义失效,表现为除设置的height值外还会显示N像素额外的高度. 实际运用中,若标签为空且定义了小于14px的高度,再加入一背景图的话,会发现该元素高度 ...

  6. vscode自定义代码块

    vscode中设置自定义代码块打开首选项,选择用户代码片段,打开后选择编程语言选中后打开文件,按照格式编辑内容 "Print to console log": { "pr ...

  7. JSTL数据格式化

    日期表示 <fmt:formatDate value="${DATE1}" pattern="yyyy-MM-dd hh:mm:ss" type=&quo ...

  8. Python基础-面向过程编程实现Linux下cat -rl ‘dir’ |grep ‘keywords’ 功能

    函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

  9. java中复制数组的5种方法

    “=”,相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量也要发生改变.,这一种勉强算是吧 使用FOR循环,将数组的每个元素复制或者复制指定元素,不过效率差一点 ...

  10. C++ inheritance: public, private. protected ZZ

    公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...