关于web安全需要在编程时注意的
公司用绿盟科技的远程安全评估系统扫描了项目,发现一些安全隐患,记录下来,以规避以后编程或者发布时犯同样的错误。
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安全需要在编程时注意的的更多相关文章
- Web Worker javascript多线程编程(一)
什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验. 一般来说Javascript ...
- Web Worker javascript多线程编程(二)
Web Worker javascript多线程编程(一)中提到有两种Web Worker:专用线程dedicated web worker,以及共享线程shared web worker.不过主要讲 ...
- 使用Web Service进行网络编程-----Web Service简介
Android应用通常都是运行在手机平台上,手机系统的硬件资源是有限的,不管是存储能力还是计算能力都是有限的,在Android系统上开发.运行一些单用户.小型应用是可能的,但对于需要进行大量的数据处理 ...
- WEB前端研发工程师编程能力成长之路(1)(转)
WEB前端研发工程师编程能力成长之路(1) [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如果你是做了两三年WEB产品前端研发,迷茫找不着提高之路,看这篇文章吧: ...
- WEB前端研发工程师编程能力成长之路(2)(转)
WEB前端研发工程师编程能力成长之路(2) 四.[入微] 最强解决方案.你能够走在需求的前面,将当前需求里有的.没有直接提出来的.现在暂时没有但将来可能有的等等,及前端编程潜规则等各个方方面面都综 ...
- 【转】Web Worker javascript多线程编程(一)
原文:https://www.cnblogs.com/peakleo/p/6218823.html -------------------------------------------------- ...
- Android开发之使用Web Service进行网络编程
使用Web Service进行网络编程 Android应用通常都是执行在手机平台上.手机系统的硬件资源是有限的,无论是存储能力还是计算能力都有限.在Android系统上开发.执行一些单用户.小型应用是 ...
- 模块化编程时,#include到底要放在哪里?
结合我自己的经验,谈一谈模块化编程时#include应该出现的位置.总结起来大体有二条规则: 一.规则1:只包含必要的头文件 看下面这个模块: ===foo.c==== #include <st ...
- 单片机中用c编程时头文件reg51.h及reg52.h解析
单片机中用c编程时头文件reg51.h及reg52.h解析 我们在用c语言编程是往往第一行就是reg51.h或者其他的自定义头文件,我们怎么样来理解呢? 1)“文件包含”处理. 程序的第一行是一个“文 ...
随机推荐
- ms project展开和折叠任务
1.视图——大纲——显示子任务 2.视图——大纲——隐藏子任务
- strstr()查找函数,strchr(),strrchr(),stristr()/strpos(),strrpos()查找字符串位置
在一个较长的字符串这查找匹配的字符串或字符,其中strstr()和strchr()是完全一样的. 例: echo strstr('why always you','you'); 输出: you 如果为 ...
- cocos2d-js 定时器
1.scheduleUpdate 节点中有scheduleUpdate接口,通过这个接口,可以让游戏在每帧执行都执行update方法 var ScheduleUpdateLayer = cc.Laye ...
- Zbar算法流程介绍
博客转载自:https://blog.csdn.net/sunflower_boy/article/details/50783179 zbar算法是现在网上开源的条形码,二维码检测算法,算法可识别大部 ...
- bzoj5450 轰炸
传送门 分析 不难想到如果这个图是一个DAG则答案就是图的最长路 于是我们考虑有环的情况 我们发现一个环上的所有点颜色一定不相同 于是我们发现答案就是缩点之后跑一遍点权最长路 点权就是这个强联通分量中 ...
- EZOJ #80
传送门 分析 经典的树型DP 我们记录dp[i][0/1]表示i的子树中到i的长度分别为偶数和奇数的长度和 dp2[i][0/1]则表示不在i的子树中的点到i的长度分别为偶数和奇数的长度和 然后根据边 ...
- PartyLocation.get请求
1.PartyLocationDto:partyDto 2.PartyLocationConverter: 3.PartyDto:Public PartyDto 4.PartyLocationToPa ...
- C++面试笔记--面向对象
说到面向对象,大家第一反应应该就是它的三大特性:封装性.继承性和多态性.那么我们先简单的了解一下这三大特性: (1)封装性:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的 ...
- SpringMVC执行流程(四)
DispatcherServlet 组建的默认配置 HandlerMapping有这两种:BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping Handl ...
- Html5代码片段收集
HTML5 启动模板 当启动一个新的项目的时候,你需要一个启动模板.这里是一个简洁干净的模板,可以作为 HTML5 项目的基础. <!DOCTYPE html> <html> ...