防止sql注入不但是新學的程序員朋友需要深入了解的一個重要知識點之外,還是我們這些寫了多年程序的朋友也必須注意的東西,下面給新手介紹php 防止查詢的sql攻擊的一些例子,希望對各位會有所幫助.
一個入門級別的例子,代碼如下:
- $k = $_REQUEST['k'];
- $k = addslashes($k);//轉義:單引號,雙引號,反斜線,NULL
- $k = str_replace('%', '\%', $k);
- $k = str_replace('_', '\_', $k);
- $sql = "select * from users where name like '%$k%'";
- if(!emptyempty($k)){
- $res = mysql_query($sql, $con) or die(mysql_error());
- if($row = mysql_fetch_assoc($res)){
- foreach($row as $k=>$v){
- echo $row[$k].':'.$row[$v].'<br />';
- }
- }
- //開源代碼Vevb.com
- }else{
- echo '******';
- }
補充:mysql_real_escape_string();所以得SQL語句如果有類似這樣的寫法:
"select * from cdr where src =".$userId; 都要改成 $userId=mysql_real_escape_string($userId)
例子代碼如下:
- <?php
- $clean = array();
- $mysql = array();
- $clean['last_name'] = "O'Reilly";
- $mysql['last_name'] = mysql_real_escape_string($clean['last_name']);
- $sql = "INSERT
- INTO user (last_name)
- VALUES ('{$mysql['last_name']}')";
- ?>
所有有打印的語句如echo,print等,在打印前都要使用htmlentities() 進行過濾,這樣可以防止Xss,注意中文要寫出,代碼如下:
htmlentities($name,ENT_NOQUOTES,GB2312).
新聞熱點
疑難解答