文档章节

一个XSS带来的一些收获和警示&常见安全问题总结

Scholer
 Scholer
发布于 2014/11/16 10:29
字数 2184
阅读 146
收藏 9

独立博客地址:http://blog.0x1.im/archives/web/one-month-begin-with-a-xss.html

一、常见的攻击方式及防御

1. XSS注入

XSS注入是最常见的、最容易的,但危害性缺不小。对于需要登录的网站,拿到cookie就意味着可以登入后台。如果后台是管理员用的,那意味着网站的大部分信息都暴漏了。如果是用户的后台,一次注入可能就意味着很多用户的私人信息暴漏在了别人面前。

XSS原理简单、手法说起来也不复杂。只要有输入框,没有做过滤,就留给了有心人一个注入代码的可能。通过注入代码调用远程的js文件,可以轻松获取到cookie等信息。

XSS的的基本防御是对用户输入的内容做好过滤,对于一些特殊字符的进行必要的处理。特别是需要写入到数据库里的数据。

2. CSRF攻击

别人诱导你点了一个链接、向后端发了一个请求,这个请求下转走了你支付宝里的钱,这就是CSRF。我登录了A站,A站有扣款的服务。我又登陆了B站,B站有个按钮实际上是A站的扣款链接,我并不知情,基本上就是这样的。

防御CSRF的关键在于后端要判断出请求是不是来自于自己呈现给用户的网页。在客户端的输入框隐藏一个输入框,框里留一个随机数,后端校验这个随机数,就能有效防御绝大部分的CSRF攻击。因为其它的网页和你的网页同时在浏览器存在的时候,从他的网页里请求你的连接时,虽然能带上cookie等信息,但是他的网页却没办法从你的网页里获取到这个随机数。

3. SQL注入

SQL注入与XSS类似,也是从输入入手。但不同于XSS,SQL注入的内容可能并不是在输入框里进行的。一个请求需要根据用户请求的内容查询数据库,就意味着可能会有SQL注入的风险。通过与预期不同的字符串进行查询,构造SQL语句来获取数据库的信息,哪怕是有一个SQL注入的漏洞不小心暴漏给了有心的人,可能整个数据库就要沦陷了。

SQL注入的防御工作也是要对从前端获取到的查询信息进行严格的过滤。对于不在预期之内的字符串进行完善的处理。

4. 被上传webshell

所谓webshell,就是能通过浏览器直接在服务器上操作命令,甚至读取到结果。webshell是由上传而已。比如PHP可以通过system命令或者exec命令执行系统命令。如果有心的人上传一个脚本到你的服务器,脚本中带上了一句:echo system($_GET['cmd']);,很不幸,他能执行任何web服务器和PHP解释器有权限执行的命令。

预防webshell需要对上传文件做严格的限制,严格控制上传文件的格式,检查上传的内容。如果是有特殊必要,也要对上传文件的访问做好严格的限制。

同时也要关注服务器、web服务器和脚本解释器的动态,比如Bash的破壳漏洞、IIS6的解析漏洞,及时防御才能规避风险。

二、开发和管理系统过程中的注意事项

许多事情需要在平时开发和维护的过程中注意,处理好一些上的问题,往往能有效的规避大部分的风险。

1. 特殊文件和特殊路径的问题

不要让不该显示的信息显示出去,不要让不该让人访问的东西让别人看到。

刚搭好环境,有时候习惯随手写个phpinfo.php放那里检查一下,事后忘记了处理,别人正好看到了,猜解路径、或者恰好又拿到了别的把柄,一整个网站基本上也就去了。

一些框架特定的版本爆出来大的漏洞,而你恰好留了version或license文件在网站跟目录,替别人省了很多事情。比如thinkphp曾经有过任意代码执行漏洞。

直接通过svn更新代码,svn早期有些版本会在所有目录下都有.svn目录,有特定的文件命名文件里直接就是代码,而你的web服务器恰好没有解析,整个网站的代码就到了别人手里。即使在新的版本里,根目录下也有个wc.db的文件,而你恰好又没有不允许.svn目录的访问。

管理后台就是一个简单的网站的路径,比如phpmyadmin就是/phpmyadmin,phpmyadmin有几个版本有万能用户名的漏洞,轻轻松松拿到数据库。

项目开发过程中,随手把数据库导出一个sql文件保存在web根目录下面,放到服务器上的时候也没有删除,有人随手去试一试,就把它下载下来了。这是很危险的。

2. 不要使用弱口令

任何时候、任何地方都不要使用弱口令。

像上面所说,即使你的phpmyadmin的版本恰好规避了以上的漏洞,而你安装的时候随手敲了个123456当密码。那基本上等于没有设防。

还有网站后台的admin如果,使用一些简单的网站名称、域名或者常见的数字字母组合当密码,很容易猜解出来。

服务器端的脚本访问数据库也不要用root账户完全权限的账号密码,如果网站被上传webshell,拿到配置文件,而数据库又恰好是超级权限的账户,不近代码暴漏在别人面前,网站也被拖库了。

3. 服务端安全策略与权限分配

如果服务器沦陷了,那基本上任何信息都暴漏在了他人面前,所以做好服务器端的管理尤为重要。登录限制、防暴力猜解、防sqlmap、防端口扫描、监控异常流量和IP能够抵御部分极大的隐患。比如破壳漏洞出现时,有些恶意注入会执行一个ping,如果ping回对方的服务器,你的服务器很快就沦陷到他手里了。如果你恰好禁止了icmp包的output,就能度过一段缓冲期。

在Linux上,每个应用程序都有一个执行的用户,web服务器和脚本解释器的用户权限做好限制、web文件目录做好分配可限制也能防止一些异常命令的执行。

4. 经常检查服务器、数据库等log信息

有时候事情已经发生了,能及时发现及时处理也能把损失降到最低。可怕的时候服务器已经沦陷在别人手里了,你还不知道。

很多时候漏洞和隐患也不是单独存在的,找到一个突破口,往往就能攻陷其它地方。比如在数据库里写入一个webshell语句,然后通过构造查询拿到服务器上的东西。

5. 经常关注安全信息

一个安全问题爆出来之后,不要想当然的认为我这里应该没事,及时检查一下才能有效预防。经常浏览一下乌云和freebuf也能及时获取到相关的资讯。

安全问题是个长期的工作,没有铁打的系统,不是一蹴而就的事情,时时留心最重要。

© 著作权归作者所有

共有 人打赏支持
Scholer
粉丝 18
博文 15
码字总数 17781
作品 0
武汉
程序员
Web-安全-学习资料(很全)​

看原文 看原文 看原文 Web-安全-学习资料(很全) Web-Security-Learning 在学习web安全的过程中整合的一些资料。 该repo会不断更新,最近更新日期为:2017/9/19。 9月19日更新: 新收录文章...

Ho0oH
2017/09/26
0
0
整理一些PHP开发安全问题

整理一些PHP开发安全问题   php给了开发者极大的灵活性,但是这也为安全问题带来了潜在的隐患,近期需要总结一下以往的问题,在这里借翻译一篇文章同时加上自己开发的一些感触总结一下。 ...

开元中国2015
2015/07/06
392
0
Django 1.10rc1,1.9.8,1.8.14 发布

Django 1.10 release candidate 1 ,Django 1.9.8 和 1.8.14 发布了,皆为安全发行版本。 Django 1.10 重要更新内容: Full text search for PostgreSQL New- middleware Official support f......

oschina
2016/07/19
1K
4
《网络黑白》一书所抄袭的文章列表

这本书实在是垃圾,一是因为它的互联网上的文章拼凑而成的,二是因为拼凑水平太差,连表述都一模一样,还抄得前言不搭后语,三是因为内容全都是大量的科普,不涉及技术也没有干货。所以大家也...

wizardforcel0
07/02
0
0
动态绑定HTML

在Web前端开发中,我们经常会遇见需要动态的将一些来自后端或者是动态拼接的HTML字符串绑定到页面DOM显示,特别是在内容管理系统(CMS:是Content Management System的缩写),这样的需求,更...

zting科技
2017/01/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

es6

在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys(),该方法返回一个数组 传入对象,返回属性名 var obj = {'a':'123','b':'345'};console.l...

不负好时光
12分钟前
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

全部原谅
13分钟前
0
0
web.xml容器加载顺序

容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

Aeroever
16分钟前
1
0
Docker容器日志查看与清理

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日...

muzi1994
17分钟前
0
0
J2Cache 和普通缓存框架有何不同,它解决了什么问题?

不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!...

红薯
19分钟前
414
12

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部