SQL注入
为什么会存在sql注入呢,只能说SQL出身不好。
因为sql作为一种解释型语言,在运行时是由一个运行时组件解释语言代码并执行其中包含的指令的语言。
基于这种执行方式,产生了一系列叫做代码注入(code injection)的漏洞 ,它的数据其实是由程序员编写的代码和用户提交的数据共同组成的。
程序员在web开发时,没有过滤敏感字符,绑定变量,导致攻击者可以通过sql灵活多变的语法,构造精心巧妙的语句,不择手段,达成目的,或者通过系统报错,返回对自己有用的信息。
1.SQL注入的危害
数据库信息泄漏:数据库中存放的用户的隐私信息的泄露;
网页篡改:通过操作数据库对特定网页进行篡改;
数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改;
服务器被远程控制,被安装后门;
删除和修改数据库表信息.
2.SQL注入的方式
通常情况下,SQL注入的位置包括:
表单提交,主要是POST请求,也包括GET请求;
URL参数提交,主要为GET请求参数;
Cookie参数提交;
HTTP请求头部的一些可修改的值,比如Referer、User_Agent等;
3.防止SQL注入的解决方案
对用户的输入进行校验,使用正则表达式过滤传入的参数;
使用参数化语句,不要拼接sql,也可以使用安全的存储过程;
不要使用管理员权限的数据库连接,为每个应用使用权限有限的数据库连接;
检查数据存储类型;
重要的信息一定要加密;