前几天发现的数据库注入总结一下

发生问题的过滤:

<?php
$type = ( in_array($_GET['t'],array(1,2,3)) )?$_GET['t']:0;

这个过滤实际不严格, 当传进来的变量以 1,2,3中的任意数字开头时过滤将失败

当用户 传 t=1' or '1'='1 时, $type获取到的变量将维持原样, 直接传到数据库进行查询时会有注入危险

总结和建议:所有由用户传入int 值 必须使用 intval() 进行过滤

字符串必须使用mysql_real_escape_string() 进行过滤

在读取 $_GET $_REQUEST $_POST $_COOKIE 时 必须进行过滤, 一般认为用户传入的数据都是不安全的.