[摘要]IDS是英文“Intrusion Detection Systems”的缩写, 中文意思是“入侵检测系统”。 传统的... IDS是英文“Intrusion Detection Systems”的缩写, 中文意思是“入侵检测系统”。 传统的IDS是一个监听设备, 这个设备通过网络链路挂接在服务器和客户端所有流量都必须流经的链路上, IDS就是通过特有IDS规则匹配黑客恶意攻击入侵行为的流量, 进行即时的监测和报警。 在历年来开源的Web程序中, 被披露最多最严重的安全漏洞一直是SQL注射, 为了减少SQL注射漏洞对各大网站造成的安全威胁, web安全研究组织80SEC在2008年编写了国内第一个脚本类IDS - MysqlIds, 使用MysqlIds可以更好的、更有效率的帮助网站管理员和程序员抵御和检测Sql注射漏洞。 现在流行的技术大部分是旁路监听, 一般不会因为IDS的性能影响网站正常的访问流量, 而Mysqlids也是按照类似的思路同样不会影响程序的性能。 Mysqlids存在于应用程序和数据库操作之间的一个环节, 完全以数据库的语法来分析执行的SQL语句, 而不是采用传统的关键字检测的方法, 对于一些非正常的SQL语句能进行阻止并且记录相关的信息, 这样就可以很快地定位程序中存在注射漏洞的地方, 为漏洞的及时修复提供必要的信息。 MysqlIds原理 MysqlIds是由PHP编写的, 通过一个封装的安全函数, 监测程序中运行的SQL查询语句, 针对黑客经常使用的union查询、select子查询、不常用的SQL注释符、文件操作和benchmark等危险函数行为进行报警, 这个IDS是无缝封装在程序里的数据库操作流程里的, 也就是黑客通过程序漏洞进行恶意的SQL注射都能被非常详细的监测到, 程序员或者网站站长甚至能使用IDS发现自己网站程序中未被察觉的0DAY漏洞。 下面我就分析MysqlIds的部分代码, 使大家可以从原理上更容易的理解MysqlIds, 我们看看MysqlIds如何监测黑客SQL注入经常使用的恶意的联合查询。 部分代码如下: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->if (strpos($clean, ’union’) !== false && divg_match(’~(^ |