公司用绿盟科技的远程安全评估系统扫描了项目,发现一些安全隐患,记录下来,以规避以后编程或者发布时犯同样的错误。

1. 目标web应用表单存在口令猜测攻击

风险:登录密码易被暴力破解,暴力破解是一种常见的弱口令猜测攻击方式,通过由字母、数字、字符组成的每一种不同组合进行口令猜测直到发现正确的口令。 如果登录页面对密码猜测攻击没有任何防护措施,攻击者可以采用暴力枚举的方式破解用户口令。

解决思路:阻止客户端频繁提交验证请求,可以用验证码,多次密码错误锁账号等来实现

2. 错误页面web应用服务器版本信息泄露

确认方法:查看请求后的response header中是否有类似这样的信息 => Server: nginx/1.4.6 (Ubuntu)

风险:Web服务器未能正确处理异常请求导致Web服务器版本信息泄露,攻击者收集到服务器信息后可进行进一步针对性攻击。

解决思路:不要用web服务器默认的错误页面,而要自定义。另外,为了避免response中返回服务器版本信息,需要做一些额外的设置,nginx的配置如下:

location = /
{
   server_tokens off;
}

3. 目标服务器启用了OPTIONS方法

风险:OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。OPTIONS方法可能会暴露一些敏感信息,这些信息将帮助攻击者准备更进一步的攻击。

解决思路:对于不必要开启的请求方式,一律关闭。Nginx的配置如下(只允许GET POST PUT DELETE)

limit_except GET POST PUT DELETE{
allow 192.168.1.0/32;
deny all;
}

4.  点击劫持:X-Frame-Options未配置

风险:点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。 HTTP 响应头信息中的X-Frame-Options,可以指示浏览器是否应该加载一个 iframe 中的页面。如果服务器响应头信息中没有X-Frame-Options,则该网站存在ClickJacking攻击风险。网站可以通过设置 X-Frame-Options 阻止站点内的页面被其他页面嵌入从而防止点击劫持。

解决思路,在nginx.conf配置如下,关于其它web服务器,请参考这里

add_header X-Frame-Options SAMEORIGIN; //SAMEORIGIN, 只允许同域名的可以frame展示; DENY, 进制一切iframe展示,uri,允许指定uri的iframe显示

5. 检测到基于HTTP连接的登录请求

风险:对于公网网站,尽量使用https连接,这个就不再赘述

6. 目标网站存在无效链接

风险:不属于安全级别,而是降低了用户体验

解决思路:删除无效链接

7. 目标服务器可能存在系统路径信息泄露

风险:检测到在服务器的响应内容中可能存在系统目录路径信息,如/home,/var或者c:\等信息,这一般是由于目标web应用没有处理好应用错误信息导致的目录路径信息泄露。如果攻击者获取到这些信息,可以了解目标服务器目录结构,给攻击者带来便利,如上传文件到服务器的其他目录。

解决思路:对于系统目录之类的信息实际上客户端一般是不需要知道的,避免返回客户端不需要的冗余信息是基本要求。

参考:

http://www.cnblogs.com/buffer/p/3204763.html

https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

http://www.cnblogs.com/jsonzheng/p/3799436.html

关于web安全需要在编程时注意的的更多相关文章

  1. Web Worker javascript多线程编程(一)

    什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验. 一般来说Javascript ...

  2. Web Worker javascript多线程编程(二)

    Web Worker javascript多线程编程(一)中提到有两种Web Worker:专用线程dedicated web worker,以及共享线程shared web worker.不过主要讲 ...

  3. 使用Web Service进行网络编程-----Web Service简介

    Android应用通常都是运行在手机平台上,手机系统的硬件资源是有限的,不管是存储能力还是计算能力都是有限的,在Android系统上开发.运行一些单用户.小型应用是可能的,但对于需要进行大量的数据处理 ...

  4. WEB前端研发工程师编程能力成长之路(1)(转)

    WEB前端研发工程师编程能力成长之路(1)   [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如果你是做了两三年WEB产品前端研发,迷茫找不着提高之路,看这篇文章吧: ...

  5. WEB前端研发工程师编程能力成长之路(2)(转)

    WEB前端研发工程师编程能力成长之路(2)   四.[入微] 最强解决方案.你能够走在需求的前面,将当前需求里有的.没有直接提出来的.现在暂时没有但将来可能有的等等,及前端编程潜规则等各个方方面面都综 ...

  6. 【转】Web Worker javascript多线程编程(一)

    原文:https://www.cnblogs.com/peakleo/p/6218823.html -------------------------------------------------- ...

  7. Android开发之使用Web Service进行网络编程

    使用Web Service进行网络编程 Android应用通常都是执行在手机平台上.手机系统的硬件资源是有限的,无论是存储能力还是计算能力都有限.在Android系统上开发.执行一些单用户.小型应用是 ...

  8. 模块化编程时,#include到底要放在哪里?

    结合我自己的经验,谈一谈模块化编程时#include应该出现的位置.总结起来大体有二条规则: 一.规则1:只包含必要的头文件 看下面这个模块: ===foo.c==== #include <st ...

  9. 单片机中用c编程时头文件reg51.h及reg52.h解析

    单片机中用c编程时头文件reg51.h及reg52.h解析 我们在用c语言编程是往往第一行就是reg51.h或者其他的自定义头文件,我们怎么样来理解呢? 1)“文件包含”处理. 程序的第一行是一个“文 ...

随机推荐

  1. checked多选,取消,反选

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. JAVA中几个修饰符的作用以及一些相关话题

    几个传统的修饰符: public 该类的子类,以及同包,或者其他情况下可以访问该修饰符修饰的方法/变量 protacted 只有同包,子类,该类本身可以访问 private 只有该类自身能访问 无修饰 ...

  3. day70-oracle PLSQL_02光标

    涨工资之前员工的工资. 如果PLSQL程序没有commit的话,命令行这边的客户端是无法读到的.这是oracle数据库的隔离级别. 为什么在PLSQL程序中commit之后还是不行呢? PLSQL程序 ...

  4. day17 14.dao模式介绍

    Web的三层架构,不是MVC,Web层,Service层,DAO层. 之前玩的JSP Servlet JavaBean那是MVC模式,那玩意只是表现层的东西. 转账汇款的例子. 说了这么多有啥用啊,一 ...

  5. Apollo——安装

    1.安装原版ubuntu 14.04http://www.ubuntu.org.cn/download/alternative-downloads 2.安装对应ubuntu 14.04的indigo版 ...

  6. Opengl创建几何实体——四棱锥和立方体

    //#include <gl\glut.h>#include <GL\glut.h>#include <iostream> using namespace std; ...

  7. Python 网络爬虫 004 (编程) 如何编写一个网络爬虫,来下载(或叫:爬取)一个站点里的所有网页

    爬取目标站点里所有的网页 使用的系统:Windows 10 64位 Python语言版本:Python 3.5.0 V 使用的编程Python的集成开发环境:PyCharm 2016 04 一 . 首 ...

  8. Entity Framework Tutorial Basics(38):Explicit Loading

    Explicit Loading with DBContext Even with lazy loading disabled, it is still possible to lazily load ...

  9. 《Maven实战》笔记-4-生命周期和插件

    除了坐标.依赖以及仓库外,Maven另外两个核心概念是生命周期和插件. 一.生命周期 Maven的生命周期是抽象的,其本身不做任务实际的工作,实际的任务(如编译源代码)都交由插件来完成. 三套生命周期 ...

  10. [转]CentOS 7.3 安装MySQL

    1.下载mysql源 yum -y install wget wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarc ...