私人领地

sql 注入问题

1.

关于使用intval强制转换成数字的问题。数字大于2147483647会出现溢出出现负数。使用个方法来替代这个吧
$n="\n";
$a=2147483648.05555;
echo intval($a).$n; //result -2147483648
echo (int) $a,$n;//result -2147483648
echo floatval($a).$n;//result 2147483648.0556
echo floor(floatval($a)).$n;//result 2147483648

大于等于11位数的要用floatval(13714482984)

2.htmlspecialchars,strip_tags,stripslashes 这些可以过滤字符串

3.

$uid = isset($_GET['uid']) ? $_GET['uid'] : 0;
$uid = addslashes(uid);
$sql = "SELECT uid,username FROM user WHERE uid='{$uid}'";     // 安全性更高
$uid = isset($_GET['uid']) ? $_GET['uid'] : 0;
$uid = addslashes(uid);
$sql = "SELECT uid,username FROM user WHERE uid={$uid}";      //安全性低

带有引号的话,sql想注入,黑客必须要先想办法闭合'' (引号),增加黑客难度

addslashes  会把库号进行转义

最佳解决办法是用intval,int,floatval

4.正则过滤字符(字符超长处理)

如:http://localhost/dailian/index.php?g=service&m=order&a=index&order_sn=201611022150472413';545a

$f = preg_replace('/(\d+).*/','\\1',$order_sn);

输出:201611022150472413

 

posted @ 2016-11-16 18:13  狂奔的蜗牛Snails  阅读(195)  评论(0编辑  收藏  举报