sql注入到底是什么?
如何进行sql注入?
如何防范sql注入?
如何检测现有系统是否有sql注入的风险?
sql注入,简单地说就是执行恶意的sql语句,或者说是构造恶意的sql语句。
进行sql注入的方式可谓是千奇百怪了,虽然这也从侧面证明了sql的功能是多么的强大。
SELECT * FROM user WHERE username = 'user'
SELECT * FROM user WHERE username = 'user'
SELECT * FROM user WHERE username = 'user'
union会把结果拼拼到一起,所有要让union前面的查询返回一个空值,一般采用类似于id=-1的方式。
UNION 需要两个被select的集合拥有相同的列数。
select name from students where id = -1 union select schema_name from information_schema.schemata;
不要信任用户的输入,对用户的输入进行校验。如用mysqli_real_escape_string()函数
开发时尽量用安全函数代替不安全函数,编写安全代码。危险函数,常见的执行命令函数,动态访问函数,如C语言中的system(),PHP的eval(),JSP的include()导致的代码越权执行,都是注入。
不要使用动态拼装sql,使用参数化的sql。预编译语句,绑定变量。使用预编译的SQL语句,SQL的语意不会变化,攻击者无法改变SQL的结构
使用SQL注入工具- sqlmap -- 开源跨平台, 很多公司都在使用sqlmap作为安全扫描服务的底层依赖。
判断是否有SQL漏洞
python sqlmap.py -u "http://www.site.com/login.php?id=3"
以“5”级别检测
python sqlmap.py -u "http://www.site.com/login.php?id=3" --dbs --level 5