SQL注入漏洞原理

272 阅读1分钟

image.png 图一,‘id’是输入的值,这个值赋值给¥id,getid是字符串组合,“selectfirstname,lastnameFROMuserid=”是SQL查询字符串,查询想要的‘getid是字符串组合,“select first_name,last_name FROM user_id = ”是SQL查询字符串,查询想要的‘id’的值,mysql_query($getid)是执行组合字符串中的SELECT 查询语句,【(mysql_query() 函数执行一条 MySQL 查询。ysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。)】当输入的值是 数字和字符串,或者输入的是数字 分号加sql命令,逻辑上会认为都是数据,就会传到数据库,数据库解析就把SQL语句执行。

image.png 图二,‘id’输入的值只能是一个数值,“if(is_numeric($id))”,numeric函数只允许是数字跟数字字符串类型,所以这里做了一个判断,如果不是数值类型和数字字符串将不能执行。其中‘id’的值只能是一个值,不能是其他的字符串或者数字加SQL命令。