专栏首页平凡少年网站常见攻击与防御汇总

网站常见攻击与防御汇总

从互联网诞生起,安全就一直伴随着网站的发展,各种web攻击和信息泄露也从未停止,本文就当下最要的攻击手段进行一次简单的汇总,也作为自己的备忘。

1、XSS攻击

  XSS攻击即跨站脚本攻击,指黑客篡改网页,注入HTML或script脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。常见的XSS攻击主要有两种,一是反射型,攻击者引诱用户点击一个嵌入恶意脚本的链接,打到攻击的目的,例如,攻击者发布的微博中有一个含有恶意脚本的URL,用户点击该URL,脚本会自动关注攻击者的新浪微博ID,发布含有恶意脚本URL的微博,攻击就被扩散了。

另外一种XSS攻击是持久性XSS攻击,黑客提交含有恶意脚本的数据,保存在攻击的Web站点的数据库中。此种攻击经常用在论坛博客等微博程序中。

XSS消毒

  XSS攻击者一般都是通过在请求中嵌入恶意脚本达到攻击的目的,这些脚本是一般用户输入不使用的,如果进行过滤和消毒处理,即对某些HTML危险字符转移,如">"转义为"&gt;"、"<"转义为"&lt;"等就可以防止大部分的攻击。

  最早由微软提出,即浏览器禁止页面Javascript访问带有HttpOnly属性的Cookie。HttpOnly并不是直接对抗XSS攻击的,而是防止XSS攻击者窃取Cookie。对于存放敏感信息的Cookie,如用户认证信息等,科通过该Cookie添加HttpOnly属性,避免被攻击脚本窃取。

2、SQL注入

  所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造(或者影响)动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。例如,攻击者发送含有恶意恶意SQL命令的http请求,如(http://www.a.com?username=eric'; drop table users;--),服务器用请求参数构造数据库SQL命令时,恶意SQL就被一起构造,并在数据库中一起执行,如:select * from users where username='eric'; drop table users;--'

消毒

  1、关闭网站错误回显,即不要把服务器内部500错误显示到浏览器上。因为攻击者可能通过故意构造非法参数,使服务器端数据库表等异常信息显示到浏览器上,为攻击者猜测数据库表结构提供了便利。

  2、通过正则匹配过滤请求数据中可能注入的SQL关键字,如“drop table”,“Update”、“Inser”,“EXEC”等。

  3、使用预编译手段,绑定参数是最好的防止SQL注入方法。攻击者的恶意SQL会被当做SQL的参数,而不是命令被执行。

3、CSRF攻击

  SCRF即跨站点伪造请求攻击,攻击者通过跨站请求,以合法用户身份进行非法操作,如转账交易、发表评论等,其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份,相应地,CSRF的预防手段主要是识别请求者身份。主要有一下几种方法。

表单Token

  CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以,表单Token通过在请求参数中增加随机数的办法来阻止攻击者获取所有请求参数:在页面表单中增加一个随机数作为Token,每次相应页面的Token都不同,从正常页面提交的表单会包含该Token值,伪造的请求无法获取该值,服务器端检查请求参数中Token的值是否正确。

验证码

相对来说,验证码则更有效,即提交请求时,需要用户输入验证码,以避免用户在不知情的情况下被攻击者伪造请求。

Referer check

  Http请求头的Referer域中记录着请求来源,可通过检查请求来源,验证  其是否合法,很多网站使用这个功能实现图片盗链(如果图片访问的页面来源不是来自自己网站的就拒绝访问)

4、其他攻击和漏洞

除了上面提到的常见攻击,还有一些漏洞也常被黑客利用

Error Page

  许多Web应用 默认是打开异常信息输出的,即服务器端未处理的异常或堆栈信息会直接显示到客户的浏览器上,这种方式虽然对调试有好处,但同时也给黑客造成可乘之机。通过故意构造非法输入,使系统运行出错,获得异常信息,从而寻找系统漏洞进行攻击。

HTML注释

HTML注释会显示在客户端的浏览器中,给黑客造成攻击便利,因此程序发布时,最好把html注释去掉。

文件上传

设置文件上传白名单,只允许上传可靠的文件类型,例如,黑客可以通过网站文件上传功能上传的是可执行文件,并通过改程序获取服务器端执行命令的能力,那么攻击者几乎可以在服务器上为所欲为了。

我们还可以只用Web防火墙和网站安全漏洞扫描来保证网站的安全性。

本文参考:大型网站技术架构。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL -- 短连接 + 慢查询

    KILL CONNECTION:主动踢除不需要保持的连接(与wait_timeout的效果一样)

    猿哥
  • Spring、Spring Boot和TestNG测试指南 - 集成测试中用Docker创建数据库

    在测试关系型数据库一篇里我们使用的是H2数据库,这是为了让你免去你去安装/配置一个数据库的工作,能够尽快的了解到集成测试的过程。

    颇忒脱
  • 使用 Swoole Server task 处理大数据量异步任务时注意

    关于 Buffered Query 和 Unbuffered Query: http://www.php.net/manual/zh/mysqlinfo.con...

    猿哥
  • Php开发过程中不常碰到的error (2.25更新)

    这个不仅存在于页面解析当中,当使用 curl 请求时拼接的参数有这种格式的也会发生转义

    猿哥
  • 猫头鹰的深夜翻译:微服务概述

    在过去几年中,出现了微服务架构的理念,它提倡将应用程序设计为可独立部署到额服务套件。虽然对于这种架构风格没有明确的定义,但是它在业务能力,自动部署,智能终端以及...

    眯眯眼的猫头鹰
  • SMProxy:基于 MySQL 协议,Swoole 开发的 MySQL 数据库连接池

    将数据库连接作为对象存储在内存中,当用户需要访问数据库时,首次会建立连接,后面并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。 使用完毕后,用...

    猿哥
  • MySQL运维实战 之 PHP访问MySQL你使用对了吗

    大家都知道,slow query系统做的好不好,直接决定了解决slow query的效率问题

    猿哥
  • win10 uwp 使用 asp dotnet core 做图床服务器客户端 服务器端客户端

    本文告诉大家如何在 UWP 做客户端和 asp dotnet core 做服务器端来做一个图床工具

    林德熙
  • MySQL主从复制虽好,能完美解决数据库单点问题吗?

    要完成二进制日志的传输过程,MySQL会在从服务器上启动一个工作线程,称为IO线程,这个IO线程会跟主数据库建立一个普通的客户端连接,然后在主服务器上启动一个特...

    猿哥
  • 如何设置根据不同的IP地址所在地域访问不同的服务?

    目前针对于跨国业务,所以国内外访问的服务可能是不同的(至少不是同一个页面),但域名想要同一个域名,于是想到要区分开访问区域。

    猿哥

扫码关注云+社区

领取腾讯云代金券