七月 1st, 2009  Tags: sql注入防护,防止sql注入
    

译者: 韩国峰 原文

简介

SQL注入攻击方式发展愈演愈烈,黑客通过SQL数据库对网站进行非法入侵并修改页面,同时页面上还会被加入恶意软件,持续影响一些网络应用程序。

本文翻译自微软博客上刊载的相关文章,英文原文版权归原作者所有,特此声明。 (特别感谢Neil Carpenter对本文写作提供的帮助)

近期趋势

从去年下半年开始,很多网站被损害,他们在用于生成动态网页的SQL数据库中存储的文本中被注入了恶意的HTML <script>标签。这样的攻击在2008年第一季度开始加速传播,并且持续影响有漏洞的Web程序。这些Web应用程序有这样一些共同点:

  • 使用经典ASP代码的程序
  • 使用SQL Server数据库的程序

应用程序代码根据URI请求字符动态地生成SQL查询(http://consoto.com/widgets.asp?widget=sprocket)这体现了一种新的SQL注入(SQL injection)的途径(http://msdn.microsoft.com/en-us/library/ms161953.aspx)。 在过去,SQL注入攻击的目标是具有如下特点的特殊Web应用程序:攻击者知道或者可以探测出后台数据库的漏洞或者结构。这样的攻击(指本文讨论的攻击- 译者注)不同,因为它是抽象的,对于攻击来说,任何存在于使用URI请求字符串动态创建SQL查询的ASP页面都可能存在。你可以在 http://blogs.technet.com/neilcar/archive/2008/03/15/anatomy-of-a-sql-injection-incident-part-2-meat.aspx找 到更多的技术详情和简单代码。 这样的攻击并非利用了Window、IIS、SQL Server或者其他底层代码的漏洞,而是利用了在这些平台上运行的由程序员自行编写的代码中的漏洞。Microsoft已经对这些攻击进行了彻底的调 查,并且发现,他们和以往的Microsoft产品的补丁和0-day漏洞无关。你可以在http://blogs.technet.com/msrc/archive/2008/04/25/questions-about-web-server-attacks.aspx获取跟多的信息。 正如上面所指出的,这些攻击在近年来呈现一种增长的趋势。这至少与两个因素有关: 第一,有暴力性的恶意攻击工具自动化进行此类操作。SANS在http://isc.sans.org/diary.html?storyid=4294讨论了这类工具。该工具使用搜索引擎来寻找具有SQL注入漏洞的站点。 第二,一个或多个恶意僵尸正在进行SQL注入攻击,用以广泛传播僵尸。SecureWorks在http://www.secureworks.com/research/threats/danmecasprox/讨 论了一个案例。 一旦某台服务器被该漏洞所攻击,它将被插入指向某.js文件的恶意<script>标签。虽然这些文件的内容不同,但是他们都尝试利用已经被 修复的Micfosoft产品的漏洞或者第三方ActiveX控件的漏洞。由于这些脚本被单独存储,这些脚本就很容易的被更新以利用更新的客户端漏洞,也 更容易按照不同浏览器来定制。

给信息技术/数据库管理员的建议

有很多事情是信息技术管理员或者数据库管理员可以采取的,以减少他们的风险和响应他们的代码和平台中可能出现的事件:

  • 检查IIS日志和数据表来寻找未知风险的标志。

由于该漏洞利用方式通过URI请求字符串作用,管理员们可以检查IIS日志来查找尝试利用该漏洞的非正常请求。你可以在http://blogs.technet.com/neilcar/archive/2008/03/15/anatomy-of-a-sql-injection-incident-part-2-meat.aspx找到如何手动进行改操作的详细信息。在 http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=WSUS&ReleaseId=13436有 进行自动化操作的工具。 如果IIS日志表明服务器可能已经被侵害,那么下一步要采取的行动就是审计相应的Web应用程序所使用的数据库中的表,并且查找附加在文本内容中 的<script>标签。 提示:IIS服务器不应当在生产环境中关闭日志。存储和适当的管理对于IIS日志都是重要的,缺少IIS日志对于响应安全事件是非常困难的。

  • 如果运行了使用后端数据库的第三方代码,则考虑不受SQL注入影响的独立软件开发商(ISV,Independent Software Vendors)。

在使用第三方ASP Web程序的情况下,管理员应当联系应用程序厂商来确定他们的产品不受SQL注入攻击的影响。

  • 确认Web应用程序所使用的数据库帐户具有最少的权限。

管理员应当确保Web应用程序所使用的SQL用户具有最小的必要权限。Web应用程序不应当以诸如”sysadmin”的服务器管理员权限或者”db_owner”的数据库权限链接。白皮书”在SQL Server 2005中的最优化安全设置和维护”: http://download.microsoft.com/download/8/5/e/85eea4fa-b3bb-4426-97d0-7f7151b2011c/SQL2005SecBestPract.doc 提供了关于SQL Server安全的多方面建议。

给Web开发者的建议

有很多优秀的文档论述在编码时如何防御SQL注入攻 击。由于这些攻击者leverage有漏洞的Web应用程序代码,所以完全防御他们的唯一方法是解析在代码中存在的漏洞。程序中任何一个使用外部资源(一 般指从URI请求字符串)数据来动态生成SQL请求的地方都应当被认为是可疑的。当代码漏洞被识别出来,他们应当被小心的修复。

  • 说明-SQL注入、ASP.NET和ADO.NET :

http://msdn.microsoft.com/en-us/library/bb671351.aspx 同时,上面的文章包含到相关文章”如何在ASP.NET中避免SQL注入” http://msdn.microsoft.com/en-us/library/ms998271.aspx,该文章同时适用于ASP。 这里有一个非常有用的视频(该视频是针对一篇防御文章的,然而链接可能已经无效了):http://channel9.msdn.com/wiki/default.aspx/SecurityWiki.SQLInjectionLab

  • 关于SQL注入如何实现的简单信息:

http://msdn.microsoft.com/en-us/library/ms161953.aspx

  • ASP代码中的SQL注入(与ASP.NET中的并不相同):

http://msdn.microsoft.com/en-us/library/cc676512.aspx 如何在ASP中执行SQL Se
rver存储过程: http://support.microsoft.com/kb/q164485

  • Microsoft安全部门(The Microsoft Security Development Lifecycle,SDL)对SQL注入的防御进行了一些指导。简单来说有三种策略来应对SQL注入攻击:

  1. 使用SQL参数查询
  2. 使用存储过程
  3. 使用SQL仅执行(execute-only)许可

Michael Howard在http://blogs.msdn.com/sdl/archive/2008/05/15/giving-sql-injection-the-respect-it-deserves.aspx谈论了这些内容。 同时,编写安全的代码(第二版)也指导了如何防御此类攻击(请浏览399-411页)。

  • 减轻SQL注入:使用参数查询(第一部分和第二部分)。使用参数化查询的好处是它将执行的代码(例如SELECT语句)和数据(由程序使用者提供的动态信息)分开。该途径防御了通过用户传递来执行的恶意语句。

第一部分: http://blogs.technet.com/neilcar/archive/2008/05/21/sql-injection-mitigation-using-parameterized-queries.aspx 第二部分: http://blogs.technet.com/neilcar/archive/2008/05/23/sql-injection-mitigation-using-parameterized-queries-part-2-types-and-recordsets.aspx 在经典ASP代码中过滤SQL注入(或者黑名单中的字符),我们将如下的工作认为是实际中临时性的解决方案,因为它治标不治本。(例如,代码仍然是有漏洞的,他仍然可能被绕过过滤机制而被访问到) IIS团队中的Nazim解释了如何过滤的详细信息:http://blogs.iis.net/nazim/archive/2008/04/28/filtering-sql-injection-from-classic-asp.aspx。 如果你仍然不了解从哪里开始,所有使用特定ASP代码访问数据库,尤其是使用由用户提供的数据的代码应当首先被检测。

给最终用户的建议

最终用户(下简称用户-译者注)应当浏览位于http://www.microsoft.com/protect/default.mspx的信息。另外,这里也有一些你可以采取以保护自己的步骤。

  • 通常应当有选择的访问网站-但是也需要了解,该漏洞也会影响用户信任的网站。

有选择的访问网站减少了你暴露在漏洞下的风险,当然即使是你所信任的也有可能被攻击。留意不正常的行为,了解面临的风险,并且实施本节提供的其他建议。

  • 针对Microsoft和第三方软件,保持安全更新。

由于恶意代码通常利用了已知的漏洞,因此你应当确保你在运行最新进行安全更新过的的Microsoft和第三方软件。Microsoft安全更新可以通过http://update.microsoft.com了解。http://www.microsoft.com/protect/computer/updates/OS.aspx有更多信息。

  • 禁用不必要的ActiveX控件和IE加载项。

你应当禁用所有不必要的ActiveX控件和IE加载项。根据KB883256(http://support.microsoft.com/kb/883256)的方法在Windows XP Service Pack2或者更新版本中来实施本步骤:

  1. 打开IE。
  2. 在”工具”菜单点击管理加载项。
  3. 点击加载项的名称。
  4. 使用如下的方法:
    • 点击更新ActiveX来使用最新的版本替换该控件。这个方法并非对所有的加载项都可用。
    • 点击”启用”,而后点击”确定”,来启用加载项。
    • 点击”禁用”,而后点击”确定”,来禁用加载项。

你可能需要重启IE来确保在启用/禁用插件的操作成功。针对更糟的操作系统,根据KB154036(http://support.microsoft.com/kb/154036)的说明进行操作。

  • 减少你所使用的第三方浏览器的受攻击风险的步骤。

如果你使用了IE之外的浏览器,那么你应当确保你安装的是最新的安全更新版本,同时你应当禁用了不必要的扩展和加载项。流行浏览器的信息可以在如下链接找到: Firefox – http://support.mozilla.com/en-US/kb/Firefox+Support+Home+Page Opera – http://www.opera.com/support/ Safari – http://www.apple.com/support/safari/

  • 更新反恶意程序软件

用户应当确保已经安装了杀毒软件和反间谍软件,并且保持他们的更新。你可以在http://www.microsoft.com/protect/computer/antivirus/OS.aspxhttp://www.microsoft.com/protect/computer/antispyware/OS.aspx找到更多信息。你可以在 http://onecare.live.com/standard/en-us/install/install.htm得到一份90天使用的Windows Live OneCare杀毒/反间谍软件。

六月 2nd, 2009  Tags: 图像特效

 

我一直在找这样的特效脚本,今天终于找到了。TJPzoom,一个用javascript/DOM编写的图像放大镜特效。当你把鼠标移动到图片上时,会产生一个放大镜查看效果。更酷的是,可以拖过鼠标的拖拽来改变缩放的大小和距离。

clip_image001

P.S 这对情侣还真够SM的:) TJPzoom是一个开源的图像特效脚本,你可以完全免费使用。进入TJPzoom

http://parandroid.com/tjpzoom-cool-image-magnifier-effects/

六月 2nd, 2009  
    

下面这个教程将告诉你如何使用Scriptaculous框架来达到一个简单的菜单滑动切换效果。(原文:woork /翻译:帕兰).

clip_image001

  1. 首先,你应该在你的网页代码里面调用准备好需要的js文件,放在<head>标签内。    
    <script language=“javascript” src=“scriptaculous/prototype.js”></script>      
    <script language=“javascript” src=“scriptaculous/scriptaculous.js”></script>
  2. 然后你可以使用使用一些简单的代码来向scriptaculous.js发出请求需要什么样的效果,比如使用下面的函数调用“onlick”属性:    
    Effect.toggle(’ID’,’type-of-effect’); return false      
    其中的ID是你想实现效果的层标签,type-of-effect是你要实现的效果。      
    下面是一个简单的示例:      
    <h1 onclick=“Effect.toggle(’about-me‘,’blind‘); return false”>About me</h1>      
    <div id=“about-me“>…some content…</div>      
    请记住,你可以给任何你想要添加效果的HTML元素赋予一个ID标签,然后再给他们不同的特效。
  3. 我说的并不是很清楚,所以给你一个包含示例的JS文件的教程下载包也是应该的。

六月 2nd, 2009  Tags: 菜单效果
    

下面这个教程将告诉你如何使用Scriptaculous框架来达到一个简单的菜单滑动切换效果。(原文:woork /翻译:帕兰).

clip_image001

  1. 首先,你应该在你的网页代码里面调用准备好需要的js文件,放在<head>标签内。    
    <script language=“javascript” src=“scriptaculous/prototype.js”></script>      
    <script language=“javascript” src=“scriptaculous/scriptaculous.js”></script>
  2. 然后你可以使用使用一些简单的代码来向scriptaculous.js发出请求需要什么样的效果,比如使用下面的函数调用“onlick”属性:    
    Effect.toggle(’ID’,’type-of-effect’); return false      
    其中的ID是你想实现效果的层标签,type-of-effect是你要实现的效果。      
    下面是一个简单的示例:      
    <h1 onclick=“Effect.toggle(’about-me‘,’blind‘); return false”>About me</h1>      
    <div id=“about-me“>…some content…</div>      
    请记住,你可以给任何你想要添加效果的HTML元素赋予一个ID标签,然后再给他们不同的特效。
  3. 我说的并不是很清楚,所以给你一个包含示例的JS文件的教程下载包也是应该的。

六月 2nd, 2009   Tags: 图片特效
    

dumpr2

PicArtiaMacOSaiX 创建马赛克图片, 用wavemypic 在线生成动态倒影图片, 用 幕末の古写真風在线生成复古风情照片, 用Redkid制作自己品牌的肥皂生成器, 再挑选3款在线制作杂志封面工具, 顺便用 phototeez为自己弄个大头贴, 还嫌不够的话再从11个在线创建卡通人物形象的网站挑选一个.

图片工具总能让我轻而易举的就创造美丽与神奇, 收获视觉的享受. Dumpr是一个专门提供各种特图片生成工具的网站, 你可以选从本地, 从URL或是从Flickr添加你的图片, 然后选定你喜欢的一个特效, 即可生成, 生成的图片可以下载保存或是快捷分享到热门的社会化网络.

Dumpr所包含的特效图片生成工具有几十种, 比如乐高拼图特效, 数码相片特效, 现代视觉特效图片, 魔方图片特效等等.

五月 31st, 2009
    

http://blog.s135.com/post/414/

“客户端访问”与“服务器端响应”,犹如一场战争。初期,访问量较小,弄几台服务器随便拉起一只队伍,就能抵抗住客户端的进攻。慢慢的,访问量大起来,这时候,就需要讲究排兵布阵、战略战术、多兵种协调作战。于是,开始有了负载均衡服务器、Web服务器、缓存服务器、数据库服务器、存储服务器等多兵种;开始有了系统架构等战略战术。随着新项目和运营需求的越来越多,我们开始了多线作战。慢慢地,我总结了以下一些思考:    
1、“收编绿林队伍”与“自己招兵买马”:    
两者的关系就犹如“使用开源软件、框架”与“自己开发模块、写框架”,如果已有的开源软件、框架、架构能够较好地用于自己的项目,并便于扩展,则优先使用开源软件;如果没有现成的东西,或者已有的开源软件性能不高、扩展性差、学习成本高,则可以取长补短,在项目中打造自己的“队伍”。    
2、适当利用“雇佣军”:    
在多个项目同时进行时,不要认为自己能打赢每一场战斗,而每一场战斗都由自己亲自去打。确实,我相信很多人能够打赢一场场战斗,却只有少数人能够打赢一场战争。前暴雪北方“四大佬”创建的旗舰工作室的倒闭,印证了这样一个事实:一群天才,却没有让一个划时代意义的游戏诞生。旗舰工作室放着捷径不走却事必躬亲,自己做客户端、自己做语聊系统、自己做图像引擎、自己做客服系统,最终自己被自己给拖垮了。    
不要让战线拉得太广,适当利用“雇佣军”,项目中的一些非重要、非核心的组成部分可以购买其他公司的成熟产品与服务,时间、费用、维护成本可能要更低。最近,我工作中的两项服务使用了“雇佣军”:(1)、购买ChinaCache CDN的Flash Media Server点播加速服务,支撑金山游戏视频宣传站点,节省了部署多节点的成本和时间;(2)、购买快网的智能DNS解析服务,来做金山游戏官网动态内容“北京多线、珠海电信、天津网通”三个机房服务器的智能DNS解析服务,节省了收集、整理,将来更新维护IP信息等工作。    
3、打造“高技术兵器”:    
现代战争的特点都拥一个有共同的前提那就是:都不可能离开“高技术兵器”。同样,要想承担高并发访问,而又希望系统架构简单一点、程序开发快捷一点,那么,则需要一款服务器端的“高技术兵器”。Web 2.0网站主要组成部分有内容页和列表页,内容页可以采用key-value形式的Memcached、Squid等开源产品来实现缓存,高并发访问下需要实时更新的列表页缓存,目前还没有合适的开源产品来解决。MySQL等数据库在高并发连接、大数据记录情况下性能低下,实时更新的列表页,成为最主要的瓶颈。我目前正在基于一些开源类库,开发的一款简单关系型数据库,将实现MySQL单表拥有的大部分复杂条件查询功能,并将达到单表千万级以上记录下,Memcached 60%左右的并发查询性能,预计6月6日开发完成进入测试阶段。    
4、精简军队,提高战斗力:    
军队越多,补给、后勤等开支也会越大,同样,服务器越多,维护成本、托管成本、复杂度也越高。所以,服务器不是越多越好,在能够保证容错性、避免单点故障的情况下,如果能用一台高配置服务器来解决的事,不要同两台低配置的服务器来干。    
传统的系统架构只不过围绕负载均衡设备或服务器、Web服务器集群、数据库服务器集群、搜索引擎服务器集群、分布式存储服务器集群、缓存系统服务器集群等等,技术含量并不是特别高,只不过很多人没有生产环境的机会去实践而已。随着内存价格的下降,单台服务器扩充到64G内存的事情不再罕见;Intel将会在下周面向高端服务器领域发布代号为Nehalem-EX的8核XEON处理器。随着硬件性能的不断提高,我预测,将来的系统架构与服务器集群将不再从服务类型上划分,而将按“CPU密集型服务器集群”、“内存密集型服务器集群”、“存储密集型服务器集群”划分。我现在所设计的架构与开发的服务器端程序,也逐渐向后者转移。    
最近,Google的工程师Luiz André Barroso and Urs Hölzle发表了一篇长达120页的论文,提出了一个数据中心就是一台计算机(The Datacenter as a Computer – An Introduction to the Design of Warehouse-Scale Machines )

1243499486_7529c300

该论文全文下载(PDF):