web网站常见攻击及防范

web网站常见攻击及防范一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种漏洞情况和防止攻击的办法.一.SQL注入所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的

大家好,又见面了,我是你们的朋友全栈君。

一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种漏洞情况和防止攻击的办法.

一.SQL注入

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。[1] 比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击

    原理:

    SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
    根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的
数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。
  

被攻击的原因:

  sql语句伪造参数,然后在对参数进行拼接的后形成破坏性的sql语句,最后导致数据库受到攻击

    防护:

    1.永远不要信任用户的输入。对用户的输入进行校验,可以通过
正则表达式,或限制长度;对单引号和双”-“进行转换等。
    2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用
存储过程进行数据查询存取。
    3.永远不要使用
管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
    4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
    5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的
错误信息对原始错误信息进行包装
    6.sql注入的检测方法一般采取辅助
软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思
网站安全平台检测工具。MDCSOFT SCAN等。采用
MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。
 7.使用预编译语句(PreparedStatement),这样的话即使我们使用sql语句伪造成参数,到了服务端的时候,这个伪造sql语句的参数也只是简单的字符,并不能起到攻击的作用。

  
二.跨站脚本攻击(XSS)

    跨站脚本攻击(XSS,Cross-site scripting)是最常见和基本的攻击WEB网站的方法。攻击者在网页上发布包含攻击性代码的数据。当浏览者看到此网页时,特定的脚本就会以浏览者用户的身份和权限来执行。通过XSS可以比较容易地修改用户数据、窃取用户信息,以及造成其它类型的攻击,例如CSRF攻击

 被攻击的原因:

  用户输入的数据变成了代码,比如说上面的<script>,应该只是字符串却有了代码的作用。

     常见解决办法:确保输出到HTML页面的数据以HTML的方式被转义

      出错的页面的漏洞也可能造成XSS攻击.比如页面/gift/giftList.htm?page=2找不到,出错页面直接把该url原样输出,如果攻击者在url后面加上攻击代码发给受害者,就有可能出现XSS攻击

 三. 跨站请求伪造攻击(CSRF)

     跨站请求伪造(CSRF,Cross-site request forgery)是另一种常见的攻击。攻击者通过各种方法伪造一个请求,模仿用户提交表单的行为,从而达到修改用户的数据,或者执行特定任务的目的。为了假冒用户的身份,CSRF攻击常常和XSS攻击配合起来做,但也可以通过其它手段,例如诱使用户点击一个包含攻击的链接

 被攻击的原因:

  用户本地存储cookie,攻击者利用用户的cookie进行认证,然后伪造用户发出请求

  之所以被攻击是因为攻击者利用了存储在浏览器用于用户认证的cookie,那么如果我们不用cookie来验证不就可以预防了。所以我们可以采用token(不存储于浏览器)认证,为每一个提交的表单生成一个随机token, 存储在session中,每次验证表单token,检查token是否正确。。
  通过referer识别,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。那么这样的话,我们必须登录银行A网站才能进行转账了。

<span role="heading" aria-level="2">web网站常见攻击及防范

 

 

    解决的思路有:
      1.采用POST请求,增加攻击的难度.用户点击一个链接就可以发起GET类型的请求。而POST请求相对比较难,攻击者往往需要借助javascript才能实现
      2.对请求进行认证,确保该请求确实是用户本人填写表单并提交的,而不是第三者伪造的.具体可以在会话中增加token,确保看到信息和提交信息的是同一个人

 

四.Http Heads攻击

   凡是用浏览器查看任何WEB网站,无论你的WEB网站采用何种技术和框架,都用到了HTTP协议.HTTP协议在Response header和content之间,有一个空行,即两组CRLF(0x0D 0A)字符。这个空行标志着headers的结束和content的开始。“聪明”的攻击者可以利用这一点。只要攻击者有办法将任意字符“注入”到headers中,这种攻击就可以发生

   以登陆为例:有这样一个url:

http://localhost/login?page=http%3A%2F%2Flocalhost%2Findex

当登录成功以后,需要重定向回page参数所指定的页面。下面是重定向发生时的response headers.

HTTP/1.1 302 Moved Temporarily
Date: Tue, 17 Aug 2010 20:00:29 GMT
Server: Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
Location: http://localhost/index

假如把URL修改一下,变成这个样子:

http://localhost/login?page=http%3A%2F%2Flocalhost%2Fcheckout%0D%0A%0D%0A%3Cscript%3Ealert%28%27hello%27%29%3C%2Fscript%3E

那么重定向发生时的reponse会变成下面的样子:
HTTP/1.1 302 Moved Temporarily
Date: Tue, 17 Aug 2010 20:00:29 GMT
Server: Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
Location: http://localhost/checkout<CRLF>
<CRLF>
<script>alert(‘hello’)</script>

      这个页面可能会意外地执行隐藏在URL中的javascript。类似的情况不仅发生在重定向(Location header)上,也有可能发生在其它headers中,如Set-Cookie header。这种攻击如果成功的话,可以做很多事,例如:执行脚本、设置额外的cookie(<CRLF>Set-Cookie: evil=value)等。
     避免这种攻击的方法,就是过滤所有的response headers,除去header中出现的非法字符,尤其是CRLF。

      服务器一般会限制request headers的大小。例如Apache server默认限制request header为8K。如果超过8K,Aapche Server将会返回400 Bad Request响应:
      对于大多数情况,8K是足够大的。假设应用程序把用户输入的某内容保存在cookie中,就有可能超过8K.攻击者把超过8k的header链接发给受害者,就会被服务器拒绝访问.解决办法就是检查cookie的大小,限制新cookie的总大写,减少因header过大而产生的拒绝访问攻击

五.Cookie攻击

      通过Java Script非常容易访问到当前网站的cookie。你可以打开任何网站,然后在浏览器地址栏中输入:javascript:alert(doucment.cookie),立刻就可以看到当前站点的cookie(如果有的话)。攻击者可以利用这个特性来取得你的关键信息。例如,和XSS攻击相配合,攻击者在你的浏览器上执行特定的Java Script脚本,取得你的cookie。假设这个网站仅依赖cookie来验证用户身份,那么攻击者就可以假冒你的身份来做一些事情。
      现在多数浏览器都支持在cookie上打上HttpOnly的标记,凡有这个标志的cookie就无法通过Java Script来取得,如果能在关键cookie上打上这个标记,就会大大增强cookie的安全性

六.重定向攻击
    一种常用的攻击手段是“钓鱼”。钓鱼攻击者,通常会发送给受害者一个合法链接,当链接被点击时,用户被导向一个似是而非的非法网站,从而达到骗取用户信任、窃取用户资料的目的。为防止这种行为,我们必须对所有的重定向操作进行审核,以避免重定向到一个危险的地方.常见解决方案是白名单,将合法的要重定向的url加到白名单中,非白名单上的域名重定向时拒之,第二种解决方案是重定向token,在合法的url上加上token,重定向时进行验证.

七.上传文件攻击
    1.文件名攻击,上传的文件采用上传之前的文件名,可能造成:客户端和服务端字符码不兼容,导致文件名乱码问题;文件名包含脚本,从而造成攻击.

     2.文件后缀攻击.上传的文件的后缀可能是exe可执行程序,js脚本等文件,这些程序可能被执行于受害者的客户端,甚至可能执行于服务器上.因此我们必须过滤文件名后缀,排除那些不被许可的文件名后缀.

    3.文件内容攻击.IE6有一个很严重的问题 , 它不信任服务器所发送的content type,而是自动根据文件内容来识别文件的类型,并根据所识别的类型来显示或执行文件.如果上传一个gif文件,在文件末尾放一段js攻击脚本,就有可能被执行.这种攻击,它的文件名和content type看起来都是合法的gif图片,然而其内容却包含脚本,这样的攻击无法用文件名过滤来排除,而是必须扫描其文件内容,才能识别。

八.session攻击,会话劫持

一句话概括:

  用某种手段得到用户session ID,从而冒充用户进行请求

原因: 由于http本身无状态,同时如果想维持一个用户不同请求之间的状态,session ID用来认证用户
三种方式获取用户session ID:

  预测:PHP生成的session ID足够复杂并且难于预测,基本不可能
  会话劫持: URL参数传递sessionID; 隐藏域传递sessionID;比较安全的是cookie传递。但同样可以被xss攻击取得sessionID
  会话固定: 诱骗用户使用指定的sessionID进行登录,这样系统不会分配新的sessionID
防御方法:

  每次登陆重置sessionID
  设置HTTPOnly,防止客户端脚本访问cookie信息,阻止xss攻击
  关闭透明化sessionID
  user-agent头信息验证
  token校验

九.DDOS

概念
  分布式拒绝服务攻击(Distributed Denial of Service),简单说就是发送大量请求是使服务器瘫痪。DDos攻击是在DOS攻击基础上的,可以通俗理解,dos是单挑,而ddos是群殴,因为现代技术的发展,dos攻击的杀伤力降低,所以出现了DDOS,攻击者借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标进行攻击。
案例:
  SYN Flood ,简单说一下tcp三次握手,客户端先服务器发出请求,请求建立连接,然后服务器返回一个报文,表明请求以被接受,然后客户端也会返回一个报文,最后建立连接。那么如果有这么一种情况,攻击者伪造ip地址,发出报文给服务器请求连接,这个时候服务器接受到了,根据tcp三次握手的规则,服务器也要回应一个报文,可是这个ip是伪造的,报文回应给谁呢,第二次握手出现错误,第三次自然也就不能顺利进行了,这个时候服务器收不到第三次握手时客户端发出的报文,又再重复第二次握手的操作。如果攻击者伪造了大量的ip地址并发出请求,这个时候服务器将维护一个非常大的半连接等待列表,占用了大量的资源,最后服务器瘫痪。
CC攻击,在应用层http协议上发起攻击,模拟正常用户发送大量请求直到该网站拒绝服务为止。
被攻击的原因:
  服务器带宽不足,不能挡住攻击者的攻击流量
预防:
  最直接的方法增加带宽。但是攻击者用各地的电脑进行攻击,他的带宽不会耗费很多钱,但对于服务器来说,带宽非常昂贵。
  云服务提供商有自己的一套完整DDoS解决方案,并且能提供丰富的带宽资源

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154903.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月4日 上午9:00
下一篇 2022年7月4日 上午9:00


相关推荐

  • android之switch控件的用法

    在做一个蓝牙开关时候,用到了switch,记一下用法,其实跟Button是几乎一样的.布局中:<Switch android:id=”@+id/open” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android…

    2022年3月10日
    46
  • LeetCode刷题_LeetCode刷题手册

    LeetCode刷题_LeetCode刷题手册  虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会。现在提供在线编程评测的平台有很多,比较有名的有hihocoder,LintCode,以及这里我们关注的LeetCode。LeetCode收录了许多互联网公司的算法题目,被称为刷题神器,我虽然早有耳闻,不过却一直没有上面玩过。  据了解,LeetCode是一个非常棒的OJ(OnlineJ…

    2025年8月8日
    7
  • scp命令用法举例

    scp命令用法举例scp 是 securecopy 的简写 用于在 Linux 下进行远程拷贝文件的命令 和它类似的命令有 cp 不过 cp 只是在本机进行拷贝不能跨服务器 而且 scp 传输是加密的 可能会稍微影响一下速度 当你服务器硬盘变为只读 readonlysyst 时 用 scp 可以帮你把文件移出来 另外 scp 还非常不占资源 不会提高多少系统负荷 在这一点上 rsync 就远远不及它了 虽然 rsync 比 scp

    2026年3月26日
    1
  • Linux开启FTP服务和修改FTP密码

    Linux开启FTP服务和修改FTP密码1 首先服务器要安装 ftp 软件 查看是否已经安装 ftp 软件下 gt gt whichvsftpd2 查看 ftp 服务器状态 gt gt servicevsftp 启动 ftp 服务器 gt gt servicevsftp 重启 ftp 服务器 gt gt servicevsftp 查看服务有没有启动 gt gt netstat an grep21tcp000 0 0 0

    2026年3月17日
    3
  • Vue vscode 创建 vue 项目流程【超详细】

    Vue vscode 创建 vue 项目流程【超详细】文章目录一 安装 node 二 配置淘宝镜像三 配置 vscode win10 四 全局安装脚手架五 创建项目六 进入项目七 项目结构一 安装 node 请在官网下载安装 https nodejs org zh cn vscode 中点击 ctrl 调出终端输入指令 node v 能显示版本号 说明 node 已经装好了输入指令 npm v 能显示版本号 说明 npm 可以使用了点击链接查看图文教程 https blog csdn net ar

    2026年3月19日
    1
  • source insight注册码S4_source insight3.5注册码

    source insight注册码S4_source insight3.5注册码sourceInsight vesion3.50.0058注册码SI3US-361500-17409

    2026年4月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号