各位大大们帮帮忙,小白惧怕表单提交的代码中含有恶意代码,用php自带函数只是简单过滤一些单双引号,但像select、insert、update、delete、union、into、load_file、outfile、% 、_ 、这些代码,使用自带函数过滤不掉。本人想通过将表单传递的内容封装到一个数组,如果碰到以上代码,则在前面加上一个反斜杠(这样考虑是出库的时候,还可以用自带函数删掉),但本人水平有限写不出这样的代码。望各位大大帮帮忙~~
表单就用$_POST['b1']、$_POST['b2']、$_POST['b3']......代替吧~~~谢谢了~~~在线等~~~
è¦é²æ¢sqlæ³¨å ¥ï¼è¿æ»¤è¡¨åè¾å ¥åºç¶éè¦ï¼ä½è¿éè¦ä»å ¶ä»æ¹é¢ä¸èµ·å ¥æ
å±è½ç¨æ·è¾å ¥ç¹æ®å符çå®è´¨æ¯ï¼ç¦æ¢ç¨æ·å©ç¨ç¨åºæ¼æ´æ¼è£ åºä¸äºæ们ä¸æ³è®©ç¨æ·æ§è¡çSQL
ä¾å¦ï¼
$sql = "SELECT * FROM table WHERE user='$_POST['user']' AND password='$_POST['pwd']'";ç¨æ·è¾å ¥
$_POST['user'] = 'john';$_POST['pwd'] = "' OR ''='";
è¦ä¹å®é æ§è¡çsqlå°±æ¯
SELECT * FROM table WHERE user='john' AND password='' OR ''=''æ以æ们è¦å¯¹ç¨æ·çè¾å ¥ååºå¤çï¼é¿å è¿ç§æ åµçåç
对äºè¡¨åè¾å ¥ï¼å¿ è¦çè¿æ»¤æ¯éè¦çï¼å¯¹äºæ¯ä¸ä¸ªè¾å ¥å¯ä»¥åä¸ä¸ªfunctionæ¥çä¸ä¸
ä¾å¦ï¼
$user_name = clean($_POST['user']);function clean($v){
if (get_magic_quotes_gpc()){
$v = stripslashes($v);
}
//转ä¹å符串ä¸çç¹æ®å符
$v = mysql_real_escape_string($v);
return $v;
}
è³äºå 容ä¸å å«ä¸äºsqlçå ³é®åï¼å ¶å®ä¸ç¨å¤ªè¿ç´§å¼ ï¼ä½æ¯å¨sqlè¯å¥ä¸å¿ é¡»å¤ç
ä¾å¦ï¼
INSERT INTO table VALUES ('xxx', 'xxx', 'xxx')è¦ä¿è¯æ¯ä¸ªå¼é½è¢«åå¼å·å èµ·æ¥
SELECTï¼UPDATEï¼DELETEä¸çWHEREæ¡ä»¶ä¹æ¯å¦æ¤ï¼ä½å¡ä»¥ç¨æ·è¾å ¥çé¨åä½ä¸ºåæ°çï¼é½å¾ç¨åå¼å·æ¬èµ·æ¥ï¼è¿æ ·å°±è½ææé²æ¢sqlæ³¨å ¥
追é®æç¨è¿æ ·çæ¹æ³ï¼ç´æ¥å°ç¹æ®å符æ©æ~~~ä¸ç¥éè¿æ ·åæ³å¦¥ä¸å¦¥~~~
å¯ä»¥ç
ä½æ¯ä¾å¦å«äººåªæ¯è¾å
¥ä¸å¥"I come from China"çè¯ï¼ç»è¿è¿ä¸ªå½æ°å°±åæ"I come China"äº
æ们ä¸è¬å¨åçæ¶åé½ä¸ä¼è½»æå°æ´ååé¤
è³äºå
·ä½è¦æä¹åå°±çä½ çç¨åºçéæ±äºï¼å¦æä½ ç¡®å®ç¨æ·ä¸ä¼è¾å
¥è±æï¼ä½ è¿ä¹åå°±æ¯å¯è¡çï¼å¦åå°±éè¦èè解å³æ¹æ¡
ç¨è¿ä¹æ´åçä¹æ¯æ³å°åªå 许ç¨æ·è¾å ¥ä¸æçï¼å 为ç½ç«çä¸å¡é»è¾ï¼è±æå符å¾å¤ä¸ç¨èèãç äºé£ä¹å¤åï¼è¾è¦äº~~~
addslashes默认的好像只过滤掉单双引号和反斜杠,我查了一下手册,上面说在预定的字符前添加反斜杠,但不清楚怎么设置预定义字符,兄台可有办法???
追答可能是你理解错了
所谓预定义字符的意思就是你将要过滤的字符,比如我有个 or name='xiii' 需要过滤,那么这个 or name='xiii' 就是预定义字符,转换后的字符是 or name=\'xiii\' ,这样就可以防止注入了,如果还不放心可以使用mysql_escape_string 函数