10/10/2018, 09:46
[help] Fix sql injection (php & mysql)
Đây là file function.php
Còn đây là file ghi ra kết quả
Khi em thêm dấu nháy ' vào thì phát sinh lỗi sql injection. Mấy bác giúp em fix nó với. Thanks.
PHP Code:
function menu($p,$loai){
$i= 0;
$result = ';
$sql = "SELECT cate_id,cate_name,cate_idp FROM tbl_category where cate_idp = 0 order by cate_id asc ";
$rs = dbQuery($sql);
if (dbNumRows($rs) >0){
while ($row = dbFetchAssoc($rs)){
$i++;
$result .= '
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="boxLeftTitleLeft"> </td>
<td class="boxLeftTitleMiddle">'.$row***91;'cate_name'***93;.' </td>
<td class="boxLeftTitleRight"> </td>
</tr>
<tr>
<td class="boxLeftLeft"></td>
<td class="boxLeftTable" align="left"><table cellspacing="0" cellpadding="1" width="100%" border="0">
<tr>
<td width="5%"></td>
<td >';
$result .= ' <table border="0" width="100%" cellspacing="0" cellpadding="0" >
<tr>
<td width="100%" >
<table border="0" width="100%" cellspacing="0" cellpadding="0" >';
$sql = 'SELECT cate_id,cate_name,cate_idp FROM tbl_category where cate_idp ='.$row***91;'cate_id'***93;.' order by cate_id asc';
$rs1 = dbQuery($sql);
if (dbNumRows($rs1) >0){
while ($row1 = dbFetchAssoc($rs1)){
if ($loai == $row1***91;'cate_id'***93;) {
$sty = "";
$b = "<b>";
$b1 = "</b>";
}
else{
$sty ="";
$b = "";
$b1 = "";
}
$result .= ' <tr '.$sty.'>
<td width="100%" >';
$result .= '
<img src="images/image28.jpg" width="10" height="7" /><a href="?module=sanpham&pcat='.$i.'&loai='.$row1***91;'cate_id'***93;.'" target="_self" ><span style='color:#3F425F' onMouseOver=change(this,'#448AD2') onMouseOut=rechange(this,'#3F425F') >
'.$b.'.$row1***91;'cate_name'***93;.'.$b1.'</span></a>
</td></tr>';
}
}
$result .='
</table>
</td>
</tr>
</table></td>
<tr>
<td height="1" class="dot" colspan="2"></td>
</tr>
</tr>
</table> </td>
<td class="boxLeftRight"></td>
</tr>
<tr>
<td class="boxLeftEndLeft"></td>
<td class="boxLeftEndMiddle"></td>
<td class="boxLeftEndRight"></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>';
}
}
return $result;
}
PHP Code:
<table width="100%" border="0" cellspacing="0" cellpadding="0" >
<?php
$p = (isset($_GET***91;'pcat'***93;) && $_GET***91;'pcat'***93; != ') ? $_GET***91;'pcat'***93; : ';
$loai = (isset($_GET***91;'loai'***93;) && $_GET***91;'loai'***93; != ') ? $_GET***91;'loai'***93; : ';
echo menu($p,$loai);
?>
<tr>
<td height="1"></td>
</tr>
Bài liên quan
Hạn chết đc phần nào
intval($var), hoặc ép kiểu cho biến dạng (int)$var
Muốn filter sql injection thì cũng dễ thôi: viết 1 module filter các dữ liệu truyền vào. Cách đơn giản nhất là replace dấu ' bằng dấu '' là xong (vì cơ bản của sql injection là phải có dấu ' để đóng 1 câu sql hiện tại và truyền thêm 1 câu sql mới vào.