$sql 是 什么 这个很关键一般来说是:select id from talbe where id='{$id}'
回楼上 $sql="select * from ".$BIAOTOU."tradelist where Id=".$id."
这一句sql 如果用户的用户名用“ 1 || 1=1”或者“1 or 1=1”就能轻而易举执行到 echo 所以那句sql应该改成$sql="select * from ".$BIAOTOU."tradelist where Id='{$id}'"
在 “ $rs = mysql_query($sql);”一句前面加一句 echo $sql; 然后在用'1 or 1=1 '测试, 看看sql的输出是不是: select * from aaatradelist where Id=1 or 1=1 这样的结果,能不往下执行吗把sql改成我的那种写法 再看看结果是不是 select * from aaatradelist where Id='1 or 1=1' 这样1 or 1=1就成了字符串
{
echo “正确”
}应该放到循环里面才对吧
if($tid==$id)
{
echo “正确”
}应该在while循环中
$id=addslashes($_POST["id"]);(//这里取用户输入的id,add函数是过滤非法注入)mysql_select_db($dbname);(//下面读数据库库的id
$rs = mysql_query($sql);
while($row = mysql_fetch_object($rs))
{
$tid=$row->id;if($tid==$id)
{echo “正确”
}
} 这样试试
echo $sql;
然后在用'1 or 1=1 '测试,
看看sql的输出是不是:
select * from aaatradelist where Id=1 or 1=1
这样的结果,能不往下执行吗把sql改成我的那种写法
再看看结果是不是
select * from aaatradelist where Id='1 or 1=1'
这样1 or 1=1就成了字符串
这是addslashes函数的作用。但是它不能把 1 or 1=1 怎么样啊。当然了除了我那个方法,你也可以用strvar()函数,把$id转换成字符型,这样也能避免注射。
$id = strvar($id);