科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道web脚本程序攻击的防范

web脚本程序攻击的防范

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

如今WEB的安全问题影响着整个安全界,SQL注入,跨站脚本攻击等攻击受到了关注。

作者:佚名 来源:51CTO.com 2008年10月17日

关键字: 脚本攻击 Web安全

  • 评论
  • 分享微博
  • 分享邮件

  如今WEB的安全问题影响着整个安全界,SQL注入,跨站脚本攻击等攻击受到了关注。网络安全问题日益变的更加重要,国内依然有很多主机受到此类安全的威胁,所以我们今天讲讲如何通过安全的编写WEB程序把损失降的更小.综观WEB主机所到的安全威胁,大多都是WEB脚本程序造成,下面就谈下如何防范受到攻击。

  1.现在很多站点为了减少开发的时间,很多站点都部分或全部采用了第三方程序,这无疑是个节省时间的好办法,但也为站点的安全性增加了风险。如果你使用了第三方公开的程序那你就要注意了,因为这类程序的源码是公开的在网上随便都可以找到,很容易被黑客下载下来去研究其中的漏洞,这样你受攻击的可能性就增加了。举个简单的例子吧,就单说国内的名气不错的动网吧,风格和实用性什么的都不错,在国内也有很多站点的论坛都采用的是动网,但动网的重大漏洞也不少,就单说上些日子比较严重的UPFILE的漏洞吧,直接上传ASP木马可怕吧!这样每当动网出现一次大的漏洞就涉及到用动网程序的站点也出现了漏洞,这两天我没事就在网上闲逛,发现很多站点的论坛用的还是动网的6.0的版本呢,人家官方的都是DVBBS7.0+SP2的了。漏洞就不用说了,肯定是存在N多了。

  解决办法:尽量少用或不用第三方程序,或应对第三方的程序进行评估后采用,另管理员不要偷懒要经常去官方站点下载更新补丁。

  2.如果你采用的是自己开发的程序,那就要注意在程序输入的地方要有严格的过滤,这也是最容易受到攻击的地方,比如SQL的注入,跨站脚本攻击基本都是利用过滤不严格,来构造畸形语句进行的。这就是所谓的输入验证攻击,你应该明白的是每一个GET和POST请求都可以用来进行输入验证攻击。然而最容易受到攻击的地方就是输入字段。通常情况下这些字段是登陆名,口令,地址,电话号码,个人主页等以及搜索的地方。还有个比较容易忽略的地方就上COOKIE的过滤,让我们来看看BBSXP+SP1的源码 下面是upface.asp 的部分代码:

  ...........

  <%

top

if Request.Cookies("username")=empty then error("

您还未登录社区")

if Request("menu")="up" then

id=Conn.Execute("Select id From [user] where username='"&Request.Cookies("username")&"'")(0)

...........

可以很清楚的看到 对 Request.Cookies("username") 这个变量根本未做任何的过滤,象这样的未过滤的地方在BBSXP里还有很多。这可以让我们来提交构造的包进行注入攻击。要说COOKIES是容易忽略的地方,User-Agent 注入会另你意想不到,在HTTP1.1规范就定义了一个“User-Agent”头标,我们抓个包看看:

GET /bbsxp/images/skins/1/T_bg.gif HTTP/1.1

Accept: */*

Referer: http://localhost/bbsxp/Default.asp

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)

Host: localhost

Connection: Keep-Alive

Cookie: eremite=0; member_id=1; pass_hash=5140c3b61780e904b05d44f8d3193564; skins=1;

ASPSESSIONIDQADBTQQA=AGIPJKACPGNICLMHAFEOBHKA; username=lanker;

userpass=E10ADC3949BA59ABBE56E057F20F883E; onlinetime=2003%2D7%2D9+22%3A20%3A13; addmin=10

“User-Agent”用来鉴别浏览器。你在这个字符串中经常可以看到“Mozilla”的一些表单。应用程序使用“User-Agent”字符串来适应浏览器的特殊性,可以允许你指定特殊的字符串这就给我们注射的机会。动网的 User-Agent 注入是最好的说明和实例了。不明白的朋友可以看看 “动网论坛DVBBS漏洞及入侵一则”和“深入分析DVBBS7 User-Agent注入”这两篇文章。这可能就属于他们所说的包注入了。下面列出通常的情况要过滤要掉字符,如下图:

然而对与一些纯数字的过滤最好莫过于用脚本语言的本身函数:

比如 asp 脚本可以用 cint,clong,isNumeric 这样的过滤可以说是最严格的一种了。PHP脚本里可以用intval这样的函数。

对于不能过滤“<  top

  if Request.Cookies("username")=empty then error("

  您还未登录社区")

  if Request("menu")="up" then

  id=Conn.Execute("Select id From [user] where username='"&Request.Cookies("username")&"'")(0)

  ...........

  可以很清楚的看到 对 Request.Cookies("username") 这个变量根本未做任何的过滤,象这样的未过滤的地方在BBSXP里还有很多。这可以让我们来提交构造的包进行注入攻击。要说COOKIES是容易忽略的地方,User-Agent 注入会另你意想不到,在HTTP1.1规范就定义了一个“User-Agent”头标,我们抓个包看看:

  GET /bbsxp/images/skins/1/T_bg.gif HTTP/1.1

  Accept: */*

  Referer: http://localhost/bbsxp/Default.asp

  Accept-Language: zh-cn

  Accept-Encoding: gzip, deflate

  User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)

  Host: localhost

  Connection: Keep-Alive

  Cookie: eremite=0; member_id=1; pass_hash=5140c3b61780e904b05d44f8d3193564; skins=1;

  ASPSESSIONIDQADBTQQA=AGIPJKACPGNICLMHAFEOBHKA; username=lanker;

  userpass=E10ADC3949BA59ABBE56E057F20F883E; onlinetime=2003%2D7%2D9+22%3A20%3A13; addmin=10

  “User-Agent”用来鉴别浏览器。你在这个字符串中经常可以看到“Mozilla”的一些表单。应用程序使用“User-Agent”字符串来适应浏览器的特殊性,可以允许你指定特殊的字符串这就给我们注射的机会。动网的 User-Agent 注入是最好的说明和实例了。不明白的朋友可以看看 “动网论坛DVBBS漏洞及入侵一则”和“深入分析DVBBS7 User-Agent注入”这两篇文章。这可能就属于他们所说的包注入了。下面列出通常的情况要过滤要掉字符,如下图:

  然而对与一些纯数字的过滤最好莫过于用脚本语言的本身函数:

  比如 asp 脚本可以用 cint,clong,isNumeric 这样的过滤可以说是最严格的一种了。PHP脚本里可以用intval这样的函数。

  对于不能过滤“<”和“>”情况下跨站的脚本的防范手段是,将所有的尖扩号都转化成对应的HTML编码。对于“<”表示成“<” 对与“>” 表示成“>” 需要特别注意的是对于上面所有的输入过滤都要在服务端进行,客户端的所有验证都会等于徒劳无用,可以很轻松的绕过。 好了上面的已经过滤的差不多了,是不是现在就万事大吉了呢?答案是否定的,其实对于一些数字字段还有许多潜在的错误使用方法。即使我们限制了数据必须是数字的值,还是会引起一些错误,所以我们下面要做的是边界的检查,你不要小视边界检查哦,某些时候他会暴出你的绝对路径来地D。一般需要我们注意检查的有:布尔值,数字,和字符串的长度。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章