在insert into ... 和 select ... where..的时候 如果字段为数字类型,添加或者查询数据时,给数字添加引号是不是多余的?
insert into table (atype) values ('1')
insert into table (atype) values (1)
atype是数字字段,这两种方法都行啊,因为mysql手册上面的东西实在是太乱,根本找不到相关的信息。
insert into table (atype) values ('1')
insert into table (atype) values (1)
atype是数字字段,这两种方法都行啊,因为mysql手册上面的东西实在是太乱,根本找不到相关的信息。
特别是查询语句,如果你select ...where后面的条件和用户输入相关,不加引号加大了受攻击的危险系数。$user_id = $_GET['user_id'];//假如用户在url里构造参数使得$_GET['user_id']为 1 or 1=1
$sql = "select * from `user` where user_id={$user_id}";//下面这句sql不就变成了select * from `user` where user_id=1 or 1=1,所有user数据?假如加了引号,又对用户有可能进行注入的入口(get post cookie)进行数据过滤,会相对安全很多。insert into table (atype) values (select something from sometable limit 1) ,括号里是可以构造sql语句的,指不定就给人利用去攻击了,所以还是加引号保险点。delete,update等也要注意此类问题。
$Intx = $_GET['id'];
$Intx = (int) $Intx;
最终$Intx的结果肯定是数字,然后再根据自己的需求设定$Intx的范围,这样他还能注入?如果传入的是字符串我直接 mysql_real_escape_string();然后两边加引号,并且我用的都是utf8编码,没有任何一个页面,数据表,字段用的是GBK,所以就不会出现0xbf27编码注入的问题。这样他还能注入?