博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
程序员需要掌握的web安全知识
阅读量:6301 次
发布时间:2019-06-22

本文共 2115 字,大约阅读时间需要 7 分钟。

  hot3.png

关于最近网站安全状况,看下乌云上某大厂的漏洞列表就知道了. 触目惊心吧,这仅仅是被曝光的,未被曝光的就更不好说了... 作为一名程序员,掌握的一些基本web安全知识,是很有必要的,下面列举一些常见的安全漏洞和对应的防御措施。文笔有限,见笑了。

CSRF 攻击

CSRF的全称是Cross Site Request Forgery,就是跨站点伪造请求攻击。 简单理解:Bad guy盗用你的身份,做桌下交易。详细原理看

经典案例:

看看乌云网友如何通过CSRF漏洞,自动加关注和发微博。

防御措施:

最有效的措施,对敏感操作增加CSRF Token验证并尽量采用POST请求方式(虽然GET 也可以增加Token验证)。
  1. 用户第一次请求网站是生成CSRF Token并保存到session中。
  2. POST请求时,增加Input Field csrf_token, 参数值通过session获得。
  3. 服务器端验证Token的合法性,并更新token。

XSS攻击

XSS攻击可以说最常见最严重的漏洞攻击了。 XSS的全称是Cross-site Scripting,就是跨站脚本攻击。主要分为非存储型XSS(反射型)和存储型XSS. 详细介绍看WIKI吧:

经典案例:

实在太多了,随便找一个:

XSS Cheat Sheet:

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

防御措施:

  1. 输入过滤, 即使用Filter 过滤一些敏感字符"<" ">" "#" "script"等.
  2. 输出过滤(output encoding),htmlEncode, javascriptEncode
  3. 对敏感操作增加验证码

过滤工具推荐(java):

https://code.google.com/p/owaspantisamy  (比较全面,但有点重)https://code.google.com/p/xssprotect/

SQL注入攻击

SQL注入这种老掉牙的攻击手段,我就不多介绍了。 最简单的防御措施,使用预编译方式绑定变量:
  1. JDBC 使用PreparedStatement.
  2. mybatis/ibatis 使用静态变量#

正确地使用Cookie

  1. 对于无需JS访问的cookie设置HTTPOnly
  2. 不要在cookie存放用户敏感数据。

合理设计一个cookie自动登录方案

要保存哪些数据:

  • cookie保存base64 encode(username|sequence|token)的value。
  • 服务器使用Redis的Hashs结构保存以下这几个值。
Key: user::cookiehashKey: userAgent_ip,userAgent_sequence,userAgent_token,userAgent_expireTime

如何验证cookie登录:

  • 如果expireTime没到而且username,sequence,token均相同,登录成功。
  • 如果expireTime没到,username和sequence相同,token不同,但IP相同和userAgent不同,登录成功。为什么要这样的设计?因为同一用户可能会使用的不同设备/浏览器登录。
  • 其余情况均登录失败,并清空登录cookie。
  • 成功登录后,服务器update token,同时更新cookie。

后续操作:

  • 修改密码/点击退出,更新服务器端的token和sequence。
  • 对于敏感操作(如修改个人私隐信息,Email,password等)需要输入密码。

数据安全

相信大家还记得CSDN 明文密码被暴库泄露的事件吧。 最近又有被暴库的,300w用户数据。

防御措施:

对密码采用
MD5/SHA(salt+password)进行HASH,salt是一串字符,为防止Rainbow Table 破解用的, salt应该放在一个隐秘的地方(某处代码或配置文件中)。

完善的日志机制

独立安全相关的log,方便追查和事后分析。 ------------下面2项可能偏运维一点,但程序员还是觉得有必要了解--------------

服务器运维配置

给大家看看最近的一个案例:

防御措施:

iptables 搞起, 该屏蔽就屏蔽,该开放的IP就开放。

DDOS攻击

一般来说,防御DDos的攻击是比较难,常见的DDOS方式较多(网络层DDOS、应用层DDOS等)。

一些非物理措施:

  • 增加anti-spam 机制
  • 限制IP请求频率, 结合ip+cookie定位一个client
  • 调小Timeout, KeepAliveTimeOut, 增加MaxClients
  • 增加容灾机器,优化网站性能。
  • 合理配置防火墙。

最后

定期了解最新的安全资讯和攻击技术,没事多上上 。

推荐书籍:

转自:http://kenny7.com/2013/04/web-security-knowledge.html

转载于:https://my.oschina.net/766/blog/211430

你可能感兴趣的文章
走红日本 阿里云如何能够赢得海外荣耀
查看>>
磁盘空间满引起的mysql启动失败:ERROR! MySQL server PID file could not be found!
查看>>
点播转码相关常见问题及排查方式
查看>>
[arm驱动]linux设备地址映射到用户空间
查看>>
弗洛伊德算法
查看>>
【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
查看>>
精度 Precision
查看>>
Android——4.2 - 3G移植之路之 APN (五)
查看>>
Linux_DHCP服务搭建
查看>>
[SilverLight]DataGrid实现批量输入(like Excel)(补充)
查看>>
秋式广告杀手:广告拦截原理与杀手组织
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>
BOOT.INI文件参数
查看>>
vmstat详解
查看>>
新年第一镖
查看>>
unbtu使用笔记
查看>>