sql注入攻击的原理以及防范措施(8年项目经理浅谈SQL注入攻击)
sql注入攻击的原理以及防范措施(8年项目经理浅谈SQL注入攻击)第3种,在后台统一采用预编译,预编译的好处就是将SQL语句提前编译成1条语句,所有的参数都只是这条语句中的查询参数,而不是再次编译成2条或多条SQL命令。第2种,做参数过滤器,将来自于页面的参数通通过滤一次,找出包含敏感字眼的参数,如:小黄;drop/delete/update …… 将这种参数做一定的处理大家都知道在数据库中 定界符默认是; 由于上面这条SQL我们不是采用的预编译,而是采用的普通的编译,那么结果就是:这1条SQL变成了3条或者多条SQL语句,一起执行,这样带来的后果就麻烦了。那么有什么办法可以规避这个问题么?有的,目前来说有3种办法可以做到避免SQL注入:第1种,尽量隐藏表结构,能不将错误提示显示在页面上,就尽量不要显示在页面上,特别是一些类似于500之类的异常错误,往往这种异常很容易暴露库结构
早在很多年以前,大概就听说过SQL注入这一说法,但是直到最近这几年才知道具体什么是SQL注入攻击,是如何攻击的。
大体来说SQL注入攻击原理图可如下表示:
好,那么什么意思呢?简单来说就是黑客利用我们SQL语句中的漏洞来对我们数据库造成攻击。比如:我们后台写了一条SQL语句如:Select * from t_user where name = “ userName ”; 这里的userName是作为页面数据的一个变量参数。正常情况下,我们一般给userName在页面传值时,都是比较正规的,如:小黄
但是黑客则不是,他们会传值:小黄;drop table t_user;delete from t_dept;……
大家都知道在数据库中 定界符默认是; 由于上面这条SQL我们不是采用的预编译,而是采用的普通的编译,那么结果就是:这1条SQL变成了3条或者多条SQL语句,一起执行,这样带来的后果就麻烦了。
那么有什么办法可以规避这个问题么?有的,目前来说有3种办法可以做到避免SQL注入:
第1种,尽量隐藏表结构,能不将错误提示显示在页面上,就尽量不要显示在页面上,特别是一些类似于500之类的异常错误,往往这种异常很容易暴露库结构
第2种,做参数过滤器,将来自于页面的参数通通过滤一次,找出包含敏感字眼的参数,如:小黄;drop/delete/update …… 将这种参数做一定的处理
第3种,在后台统一采用预编译,预编译的好处就是将SQL语句提前编译成1条语句,所有的参数都只是这条语句中的查询参数,而不是再次编译成2条或多条SQL命令。