SQL盲注
问题
SQL盲注,这个词我想大家应该不怎么陌生。如果说实在不知道的话,那么"SQL注入"你一定听说过。这两个词似乎有什么联系,长的跟双胞胎似的?没错,SQL盲注是一种Web系统的安全漏洞,而且是比较严重的那种,它是SQL注入的其中一种方式。也就是说,SQL注入存在很多种方式,而SQL盲注就是其中的一种。
在安全级别中,SQL盲注是一种威胁程度很高的安全漏洞,通过这种方式,可以入侵服务提供商的服务器数据库,从而窃取、篡改、甚至是删除用户数据。当然,在正常情况下,这些都是不允许发生的,在系统上线之前,这些都是经过严格检测的,而且数据库中的数据也都是不定向的加密,不会暴露用户数据的。
解决方案
SQL盲注的危害大家也都清楚了,那么该如何防止这种情况的发生呢?说简单点,就是对请求进行过滤,对参数进行验证,对非法字符进行拦截替换,清理用户输入的危险字符,保证sql能够在数据库中正确的编译和执行。这就是解决的简单思路。不过,今天我想要说的不是这些,而是在巨人的肩膀上发现问题,解决问题。
MyBatis,一款相当好用的持久化框架,有了它之后,我们省下了很多的时间、很多的重复性工作。同时,也要意识到,在框架的运用中,也是存在一些安全问题的,当然,框架中有的已经给出了很好的解决方案,但有的还是需要我们自己去解决。比如这个SQL盲注的问题,MyBatis就给出了很好的解决方案,在mapper.xml文件中使用#{name}的方式提供占位符,使得sql在数据库中编译的时候,将这些占位符替换成用户输入的正确的参数值,这样就避免了一部分的问题。
当然,这仅仅是第一步,如果你想写出一个彻底防止SQL盲注的系统。那么还是需要对用户发出的请求进行过滤,而且还要包括请求中的参数值,很有可能包括一些危险字符,这些危险字符就是我们需要过滤并处理的问题所在。关于解决危险字符这一块,我留到后面细说,因为这涉及到很多个漏洞,包括:XSS,CSRF等等。