文档章节

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

Scholer
 Scholer
发布于 2014/11/16 10:29
字数 2184
阅读 145
收藏 9
点赞 0
评论 0

独立博客地址: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

整理一些PHP开发安全问题

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

开元中国2015 ⋅ 2015/07/06 ⋅ 0

PHP开发常规安全问题总结

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

PHP开发学习门户 ⋅ 2014/10/12 ⋅ 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 ⋅ 4

动态绑定HTML

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

zting科技 ⋅ 2017/01/19 ⋅ 0

Django 1.8 beta 2/1.7.6 发布,安全更新!

Django 1.8 beta 2/1.7.6 发布,此版本解决了 Django admin 的一个安全问题。建议所有用户尽快升级!此版本现已提供在 PyPI,下载: Django 1.8 beta 2 (download Django 1.8b2 | 1.8b2 che...

oschina ⋅ 2015/03/10 ⋅ 3

XSS攻击之窃取Cookie

窃取Cookie是非常简单的,因此不要轻易相信客户端所声明的身份。即便这个Cookie是在数秒之前验证过,那也未必是真的,尤其当你仅使用Cookie验证客户端的时候。 2006年1月,LiveJournal遭到了...

张孝国 ⋅ 2017/08/15 ⋅ 0

CKEditor 4.4.6 安全补丁版本发布

CKEditor 4.4.6 发布了,该版本对底层的编辑器核心进行了一些显著的改进,包含内容选择和样式系统相关的问题,修复了各种 bug,同时包含一个 HTML 解析中的安全问题。所以强烈建议升级! 安全...

oschina ⋅ 2014/11/26 ⋅ 4

php项目安全问题

常见安全问题: 恶意攻击,暴力破解;Sql注入;Xss攻击。 (1)恶意攻击,暴力破解 Get方式恶意攻击,(dos),通常硬件的方式来防止,防火墙。 Post方式暴力破解,从程序的角度来防止,最通用...

Weltch ⋅ 2016/10/15 ⋅ 0

《网络黑白》一书所抄袭的文章列表

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

wizardforcel0 ⋅ 2016/11/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Linux kernel脉络和主干总结

写在前面 前人常说,对Linux操作系统/内核的理解,是计算机行业从业者的内功,决定了你在技术领域想走多远。但内核的庞大以及学习曲线之陡峭,总让我在学习途中觉得犹如“管中窥豹”。 随着工...

Markz0928 ⋅ 27分钟前 ⋅ 0

在gcc中使用intel风格的内联汇编

很简单,内联汇编使用asm(“.intel_syntax noprefix/n”)声明一下,以后的内联汇编就可以用intel风格了,构建可执行文件时给gcc加上-masm=intel参数。 先写一个小程序测试一下: [cpp] view...

simpower ⋅ 37分钟前 ⋅ 0

NIO 之 ByteBuffer实现原理

相关文章 BIO、NIO、AIO 内部原理分析 NIO 之 Selector实现原理 NIO 之 Channel实现原理 前言 Java NIO 主要由下面3部分组成: Buffer Channel Selector 在传统IO中,流是基于字节的方式进行...

轨迹_ ⋅ 46分钟前 ⋅ 0

Jenkins docker权限问题

环境Ubuntu Server 工具 jenkins-war:2.89.2 报错信息 Cannot connect to the Docker daemon. Is the docker daemon running on this host?Build step 'Execute shell' marked build as fai......

Pulsar-V ⋅ 47分钟前 ⋅ 0

180621-一个简单的时间窗口设计与实现

如何设计一个计数的时间窗口 时间窗口,通常对于一些实时信息展示中用得比较多,比如维持一个五分钟的交易明细时间窗口,就需要记录当前时间,到五分钟之前的所有交易明细,而五分钟之前的数...

小灰灰Blog ⋅ 今天 ⋅ 0

Android之Dalvik、ART、JIT、AOT

Android之Dalvik、ART、JIT、AOT 本文内容:Dalvik、ART、JIT、AOT之间关系 本文定位:知识记录 学习过程记录,加深理解,提升文字组合表达能力。也希望能给学习的同学一些灵感 本文整理于[...

lichuangnk ⋅ 今天 ⋅ 0

Thrift RPC实战(五) thrift连接池

Thrift本身没有提供连接池,我们可以用Apache Commons Pool2来实现一个 一、定义对象工厂 BasePooledObjectFactory<T> extends BaseObject implements PooledObjectFactory<T> public class......

lemonLove ⋅ 今天 ⋅ 0

git 命令简写

简写 命令 g git gst git status gd git diff gdc git diff --cached gdv git diff -w "$@" | view - gl git pull gup git pull --rebase gp git push gc git commit -v gc! git commit -v ......

charley158 ⋅ 今天 ⋅ 0

Java中的锁使用与实现

1.Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 在Lock出现之前,java程序是靠synchronized关键字实现锁功能的,而Java SE5之后,...

ZH-JSON ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧四-类和方法注释模板设置

IDEA自带的注释模板不是太好用,我本人到网上搜集了很多资料系统的整理了一下制作了一份比较完整的模板来分享给大家,我不是专业玩博客的,写这篇文章只是为了让大家省事。 这里设置的注释模...

Mkeeper ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部