网页脚本攻击防范全攻略

 更新时间:2016年9月20日 19:03  点击:1321

  近来,网络上的SQL Injection 漏洞利用攻击,JS脚本,HTML脚本攻击似乎逾演逾烈.陆续的很多站点都被此类攻击所困扰,并非像主机漏洞那样可以当即修复,来自于WEB的攻击方式使我们在防范或者是修复上都带来了很大的不便。HOOO…… 一个站长最大的痛苦莫过于此.自己的密码如何如何强壮却始终被攻击者得到,但如何才能做到真正意义上的安全呢?第一,别把密码和你的生活联系起来;第二,Supermaster的PWD最好只有你自己知道;第三,绝对要完善好你的网站程序。然而怎样才能完善,这将是我们此文的最终目的。

  安全防护,如何做到安全防护?想要防护就要知道对方是如何进行攻击。有很多文章都在写如何攻下某站点,其实其攻击的途径也不过是以下几种:

  1. 简单的脚本攻击

  此类攻击应该属于无聊捣乱吧。比如****:alert(); </table>等等,由于程序上过滤的不严密,使攻击者既得不到什么可用的,但又使的他可以进行捣乱的目的。以目前很多站点的免费服务,或者是自身站点的程序上也是有过滤不严密的问题。

  2. 危险的脚本攻击

  这类脚本攻击已经过度到可以窃取管理员或者是其他用户信息的程度上了。比如大家都知道的cookies窃取,利用脚本对客户端进行本地的写操作等等。

  3. Sql Injection 漏洞攻击

  可以说,这个攻击方式是从动网论坛和BBSXP开始的。利用SQL特殊字符过滤的不严密,而对数据库进行跨表查询的攻击。比如:

  http://127.0.0.1/forum/showuser.asp?id=999 and 1=1

  http://127.0.0.1/forum/showuser.asp?id=999 and 1=2

  http://127.0.0.1/forum/showuser.asp?id=999 and 0<>(select count(*) from admin)

  http://127.0.0.1/forum/showuser.asp?id=999’; declare @a sysname set @a='xp_'+ 'cmdshell' exec @a 'dir c:'---&aid=9

  得到了管理员的密码也就意味着已经控制的整站,虽然不一定能得到主机的权限,但也为这一步做了很大的铺垫。类似的SQL Injection攻击的方式方法很多,对不同的文件过滤不严密所采取的查询方式也不同。所以说想做好一个完整的字符过滤程序不下一凡功夫是不可能的。

  4. 远程注入攻击

  某站点的所谓的过滤只是在提交表格页上进行简单的JS过滤。对于一般的用户来说,你大可不必防范;对早有预谋的攻击者来说,这样的过滤似乎根本没作用。我们常说的POST攻击就是其中一例。通过远程提交非法的信息以达到攻击目的。

  通过上面的攻击方法的介绍,我们大致的了解了攻击者的攻击途径,下面我们就开始重点的介绍,如何有效的防范脚本攻击!

  让我们还是从最简单的开始:

  l 防范脚本攻击

  JS脚本 和HTML脚本攻击的防范其实很简单:server.HTMLEncode(Str)完事。当然你还不要大叫,怎么可能?你让我把全站类似<%=uid%>都加过滤我还不累死?为了方便的过滤,我们只需要将HTML脚本和JS脚本中的几个关键字符过滤掉就可以了:程序体(1)如下:

  ‘以下是过滤函数

  <%

  function CHK(fqyString)

  fqyString = replace(fqyString, ">", ">")

  fqyString = replace(fqyString, "<", "<")

  fqyString = replace(fqyString, "&#", "&")

  fqyString = Replace(fqyString, CHR(32), " ")

  fqyString = Replace(fqyString, CHR(9), " ")

  fqyString = Replace(fqyString, CHR(34), """)

  已有的网站是GB2312编码?看到UTF-8编码的优点有点心动?本文就是教你如何把网站从GB2312转为UTF-8。

  GB2312是简体中文的编码,所以当文章/网页中包含繁体中文、日文、韩文时,这些内容可能无法被正确编码。

  有一种比GB2312编码略广的编码,就是GBK,它包含了对繁体中文的编码,但对他国非拉丁字母语言还是有问题。

  UTF-8编码是一种目前广泛应用于网页的编码,它其实是一种Unicode编码,即致力于把全球所有语言纳入一个统一的编码。目前UTF-8已经把几种重要的亚洲语言纳入,包括简繁中文和日韩文字。采用UTF-8编码的网页某种意义上说就是“与国际接轨”了。此外,很多手机终端都使用UTF-8编码,如果网站考虑开发WAP界面而网站数据本身又是UTF-8编码,就省却了开发WAP界面时的转码问题。

  已有的网站是GB2312编码?看到UTF-8编码有点心动?本文就是教你如何把网站从GB2312转为UTF-8。

  在转换前,必须考虑网站是否有必要转码。我提供几点供参考:
  1、网站面向的对象,是局限一小圈子的人,还是中国大陆,还是包括港澳台在内的整个中国甚至全世界。

  2、在GB2312编码中一个汉字占2个字节,而在UTF-8中,一个汉字要占3个字节,这种空间增加的代价是否值得。

  3、在旧有的数据库系统上(例如MySQL 4.0及以前的版本)可能没有内置对UTF-8的支持,虽然本文有办法解决,但不排除还潜在一些小问题。

  4、网页文件转为UTF-8编码后是否方便编辑。我目前用ZDE4,设置好后对UTF-8编码支持非常好。设置方法是在菜单Tools->Preferences中,点Editing标签,把Encoding改为UTF-8即可。

考虑好决定转码以后,就可以开始了。本文仅以php 4.0~5.0 + MySQL 3.23~4.0为例。

  首先对准备转码的数据库,为其建立一个新的数据库及相应表结构用于存储转码结果。如果在没有内置支持UTF-8的数据库系统操作,则建议把用于存储中文的CHAR、VARCHAR、TEXT字段分别改为BINARY、VARBINARY、BLOB,虽然我试验过不改也没有问题。

  接着在操作系统命令行下执行如下命令导出原有的数据库(其中{dbname}用数据库名替换,{path1}用一个已存在的临时路径替换,导出的数据将会存放于此):
mysqldump --opt --comments=0 -n -t --fields-terminated-by=, --fields-escaped-by= {dbname} -uroot -p --tab={path1}

  上述命令中的用户root也可换为其它用户,但须保证有dump的权限。用转码工具,例如ConvertZ,把上面{path1}中的全部文件转为UTF-8编码。注意要关闭BOM选项。假设转码后的文件保存在路径{path2}。

  用有LOAD DATA权限的用户连接MySQL服务器,用use命令选择刚才新建的数据库,然后对每个表{table_name}执行如下命令:
LOAD DATA INFILE '{path2}{table_name}.txt' INTO TABLE {table_name} FIELDS TERMINATED BY ',' ESCAPED BY '';

  提示:表比较多的时候可以写个小程序生成一个SQL脚本。

  执行上述命令时可能会出现警告(Warnings),请留意Warning的这些行(Row),可能有些数据并没有转换成功,例如字段错位。

  根据经验,此种情况多数是由数据结尾的字节的16进制码大于7F所致。通常这些行数量是比较少的,可以手工修正这些行。

  至此数据库的转码就完成了。清理原数据库和转码过程的临时文件这里就不详述了。

  对网页转码:同样用转码工具把网站所有网页转为UTF-8编码。

  然后打开包含头部的网页文件/网页模版文件,把这样的行:

  替换为这样:

  据我的经验,如果网页采用css样式表控制网页样式,如果在css的body标签中设置了字体,那么在原来的gb2312编码下,该字体设置可以继承到intput和textarea中,但转为utf-8后,需要在input和textarea标签中重新设置字体。



  首先,为了使大家能边看下面的介绍边上机操作,您需要在Windows 95或Windows NT上作如下准备工作。 

  1.建立ACCESS数据库,c:my documentsmydata.mdb。 

  2.在mydata数据库中建表mytable(a dblong,b dbtext,c dblong),并添加适量的试验数据。 

  3.建立系统DSN(database source name),在控制面板的ODBC中进行设置,取数据源名为ACCESSMDB,并指向刚建的mydata数据库。 

  4.安装PWS(Personal Web Server),它位于Windows 98光盘的addonspws目录中。 

  5.用frontpage在PWS上新建一Web,如http://yourhostname/myweb,在缺省情况下,yourhostname是您的主机名称。 

  6.用frontpage软件打开新建的myweb,并新建一子目录scripts,然后将scripts设置为可执行的子目录。 

  至此,如果您的设置正确,那么就可打开Internet Explorer(以下简称IE),并在地址栏中键入http://yourhostname/myweb/scripts后就会看到如下提示: 

  Directory Listing Denied 

  This Virtual Directory does not allow contents to be listed 

  这是因为该目录既无缺省的html文件(一般为default.htm),又不允许列出目录,但这已说明您的pws设置正确。下面来介绍第一种制作方法。 

  一.用Frontpage Database Region Wizard向导完成设置 

  ·打开Frontpage,进入已经建好的Web即myweb中,新建一页面newpage1,并编辑它。 

  ·单击菜单栏中的“insert”,并选择“database”、“database region wizard”,这时会弹出一个对话框。 

  ·在“odbc data source name”下的输入栏中,输入已建好的DSN,即Accessmdb,然后点击Next按钮进入下一步。 

  ·在“Enter the sql string for the query”下的输入栏中输入select a,b,c from mytable,然后点击Next按钮进入一下步。 

  ·点击Add按钮,在“enter the name of a query field to be added to the list”下的输入栏中输入字段名a,然后点击Ok按钮。 

  ·重复上一步,将字段b和c都添加到查询列表中。 

  ·点击Finish按钮。 

  ·此时系统会提示您将该页面保存在可执行的目录中,并将扩展名改为*.asp,按照提示将newpage1.htm移动到scripts目录中,将newpage1.htm重命名为newpage1.asp。 

  在IE地址栏中输入http://youhostname/myweb/scripts/newpage1.asp,按回车后就会看到数据库中的实验数据被显示了出来。 

  此种方法操作简单,但不灵活,生成的html文件可读性差,不容易添加二次链接。 









  本文的目的只是力图对大量的基于脚本的技术名称和缩写词作一指点。去年,这些名称已作了一些改变。同样地,一些技术已由初始阶段发展得更为成熟和完善,有的则略微有了些改变,但却仍旧沿用原来的名称(因此现在看来有点混乱)。但是当你读完本文,所有事情都会清楚了。按顺序排列,请看下文:

  Dynamic HTML (DHTML) DHTML Scriptlets XML XML Scriptlets IE 5.0 Behaviors HTML Components (HTC) 

  以上这些名称的范围较大,但都是可从Microsoft获得的典型的脚本类技术的名称。 

  动态HTML(Dynamic HTML)

  因为动态HTML(Dynamic HTML)首次出现在Internet Explorer 4.0中,所以它是所有Microsoft脚本 技术的鼻祖。动态HTML(Dynamic HTML)也可归为“A”(代表Active),即现在使用的大量引擎、编程工 具和技术。

  每个web页面都是标记、段落、表单、Windows中的表单元素、帧和表格等的有机组合,想到了 这一点,就会对文档对象模型(Document Object Model)有个粗略的认识。World Wide Web 代理 (W3C)对此所做的标准的说明详细地阐述了web页面中内容的层次及访问的路径。 

  DHTML是一个名称,它通常用于识别一种方式,即IE4,IE5 and Navigator4改变某种模式并用 它来确定当前Web页面的模式。关键是这些模式利用页面本身的代码支持动态的和脚本驱动的web页面的变化。这就为那些编写动态的和交互式应用程序的Web开发者开辟了一条新路。 

  编者按:当W3C发布DOM规则时,它希望两种主要浏览器(IE和Nav)的第五个版本都能按照这个 规则执行他们的DHTML。这样,尽管Nav5适合DOM而IE5不适合,web管理员也更容易创建两种浏览器都兼容的Web页面,而不是象目前这样在IE4/Nav4浏览器中要用不同的方式执行DHTML。 

  动态HTML脚本组件(DHTML Scriptlets) 

  DHTML支持在一个web页面中组织各种不同类型的内容以达到许多特殊效果,利用这些代码,还 可以在多个页面中重复使用这些内容和功能。在这个过程中,通常使用的是“剪切”和“粘贴”,但有时却不需做太多重复工作。 

  例如,粘贴SPANs & IMGs或TABLEs & anchors以创建一个全新的对象,该对象有预设功能和用 户化的参数,或许一个TABLE和the Remote Data Service ActiveX控制元能够使该对象以多种方式显示各项记录。它不是一个新的标记,也不是一个新的二进制ActiveX控件,而是一个基于HTML的可视组件:一个DHTML Scriptlet。 

  一个DHTML Scriptlet是一个HTML页面置入另一个HTML主页,该主页有一主体和一组脚本代码可 独立运作,它还可展示一些性能、方法和内容。一个DHTML Scriptlet通过OBJECT标记置入并由一个 简单的HTML文件提供。如果有用户界面,这种对象就能显示某些特殊功能。但它也可以成为一个简单的、不起眼的商业化对象。 

  最初被简单地称作脚本的组件如今已丧失了许多原有的价值且已不再受人青睐,但要创建组合 HTML控制权,只有用它才可能完成。如果需要一个特殊的可视的HTML组件,该组件是多种标记的组合,那么除了二进制ActiveX控件外,DHTML Scriptlets是唯一的选择。如果不考虑用户界面,或只想要提高单个元素的性能,那么就应该利用其它基于脚本的工具了。 

  XML

  XML是eXtensible Markup Language的缩写,它可为Web应用程序提供一个新的开发范围。XML正成为 一种广泛地应用于在Web间交换数据的编程语言。值得推崇的是,它的结构与HTML相似但更为严谨。XML的重要性在于它是专用于创建新的脚本类的编程语言,这种脚本是由脚本代码组成的真的COM对象。 

  XML Scriptlets 

  如今,XML Scriptlets是一个令人困惑的问题,而它们的初始名Server Scriptlets则更另人费解。从Server到XML有一个很大的飞跃,但原来的名称更易于理解: 

  1、他们象服务器一样工作。 

[!--infotagslink--]

相关文章

  • Powershell实现编写和运行脚本

    本文为那些对学习 Windows PowerShell 命令行和脚本编写环境感兴趣的系统管理员提供了资源。也请告诉我们本网站如何才能对您更有用处。...2020-06-30
  • Shell脚本中让进程休眠的方法(sleep用法)

    这篇文章主要介绍了Shell脚本中让进程休眠的方法,本文讲解的就是sleep的用法,可以实现睡觉若干秒、若干分钟、若干小时,需要的朋友可以参考下...2020-07-11
  • php根据用户语言跳转相应网页

    当来访者浏览器语言是中文就进入中文版面,国外的用户默认浏览器不是中文的就跳转英文页面。 <&#63;php $lan = substr(&#8194;$HTTP_ACCEPT_LANGUAGE,0,5); if ($lan == "zh-cn") print("<meta http-equiv='refresh' c...2015-11-08
  • 腾讯视频怎么放到自己的网页上?

    腾讯视频怎么放到自己的网页上?这个问题是一个基本的问题,要把腾讯视频放到自己的网页有许多的办法,当然一般情况就是直接使用它们的网页代码了,如果你要下载资源再放到...2016-09-20
  • JavaScript 实现自己的安卓手机自动化工具脚本(推荐)

    这篇文章主要介绍了 JavaScript 实现自己的安卓手机自动化工具脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-05-14
  • 自动设置安卓手机wifi代理的PowerShell脚本

    这篇文章主要介绍了自动设置安卓手机wifi代理的PowerShell脚本,帮助大家进行抓包测试,感兴趣的朋友可以了解下...2020-10-17
  • 基于JavaScript实现网页倒计时自动跳转代码

    这篇文章主要介绍了基于JavaScript实现网页倒计时自动跳转代码 的相关资料,需要的朋友可以参考下...2015-12-29
  • 网页头部声明lang=”zh-cn”、lang=“zh”、lang=“zh-cmn-Hans”区别

    我们现在使用的软件都会自动在前面加一个申明了,那么在网页头部声明lang=”zh-cn”、lang=“zh”、lang=“zh-cmn-Hans”区别是什么呢?下面我们就一起来看看吧. 单...2016-09-20
  • C#实现Winform中打开网页页面的方法

    这篇文章主要介绍了C#实现Winform中打开网页页面的方法,涉及WinForm中WebBrowser的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • PowerShell因为在此系统中禁止执行脚本的解决方法

    今天看到国外的一篇文章可以在cmd中运行95版本的ps1格式的批处理,但经过测试默认情况下powershell支不支持执行脚本需要执行如下操作...2020-06-30
  • Jmeter如何基于命令行运行jmx脚本

    这篇文章主要介绍了Jmeter如何基于命令行运行jmx脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-22
  • 入门shell脚本基础及原理

    弄懂shell程序,源代码,以及python脚本能够向运维开发方向走,shell程序能够管理集群,提高开发的效率,shell是命令解释器,调用系统内核,帮助你对内核的刷新认识...2021-09-06
  • Go语言通过http抓取网页的方法

    这篇文章主要介绍了Go语言通过http抓取网页的方法,实例分析了Go语言通过http操作页面的技巧,需要的朋友可以参考下...2020-05-05
  • shell脚本中用正则表达式匹配IP及Email

    本文我们将会学习一下在shell脚本中如何使用正则表达式,常用的shell正则表达式,当然重点还是如何在shell脚本中用正则表达式匹配IP及Email。 shell也可以使用正则分...2016-11-25
  • C#抓取网页数据 解析标题描述图片等信息 去除HTML标签

    本文主要一步一步介绍利用C#抓取页面数据的过程,抓取HTML,获取标题、描述、图片等信息,并去除HTML,希望对大家有所帮助。...2020-06-25
  • 什么是Shell?Shell脚本基础知识详细介绍

    这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell、有多少种Shell、一个Shell脚本代码实例,需要的朋友可以参考下...2020-07-11
  • 分析网页的几种加密技术

      现在专业性的网站越来越多,许多网友们都在网上建立起了自己的小家。不过辛辛苦苦制作的网页被人拿去改头换面却是件非常痛心的事,所以大家都想保护自己独创的...2016-09-20
  • 网页页面控制注意事项

    1、检查标题。2、检查版权信息,尤其是电话号码。3、图片、文件定位问题。4、产品页面首页指向产品类别问题。5、文章页面首页指向文章类别问题。6、产品图片大小...2016-09-20
  • 如何在网页中制作虚线表格

      在制作网页的时候,常常要遇到制作虚线表格的问题,下面的文章就能解决这个问题。  方法一:作一个1X2的图。   半黑半白,再利用表格作成线。这种方法虽然麻烦...2016-09-20
  • linux c程序中获取shell脚本输出的实现方法

    以下是对在linux下c程序中获取shell脚本输出的实现方法进行了详细的分析介绍,需要的朋友可以过来参考下...2020-04-25