我最近進行的客戶端代碼審計,我發現這行代碼是進行盲SQL注入修補基於時間的SQL注入
代碼片段:
<?php
if ($_GET['id'] != ''){
$groepsindeling = $_GET['id'];
} else {
$groepsindeling = $_GET['group'];
}
breadcrumb($groepsindeling);
?>
<?php
$groep = "SELECT * FROM `menubalk` WHERE `webnr` LIKE '%$webnr-%' AND `hoofdgroep` = '$_GET[id]' ORDER BY `naamt1` ASC";
$groepres = mysql_query($groep);
while ($groeprij = mysql_fetch_array($groepres)){
?>
我立刻修補它通過使用mysqli_real_escape_string()函數。
新代碼:
<?php
if ($_GET['id'] != ''){
$groepsindeling = mysqli_real_escape_string($_GET['id']);
settype($groepsindeling, "integer");
}
else {
$groepsindeling = mysqli_real_escape_string($_GET['group']);
}
breadcrumb($groepsindeling);
?>
<?php
$groep = "SELECT * FROM `menubalk` WHERE `webnr` LIKE '%$webnr-%' AND `hoofdgroep` = '$_GET[id]' ORDER BY `naamt1` ASC";
$groepres = mysql_query($groep);
while ($groeprij = mysql_fetch_array($groepres)){
?>
我沒有進一步的測試,看看代碼會工作,它的工作對基於SQL盲注布爾,但它似乎是基於SQL盲註失敗的時間仍然是適用於此。
所有的建議表示讚賞。
您仍然在查詢中使用非轉義$ _GET ['id']。 –
1.你在混合mysql和mysli apis。 2.你不應該再使用mysql api了。它在幾年前被棄用,並在php v7中被刪除。 3.簡單的轉義對於所有類型的sql注入是不夠的。要麼使用參數化查詢(在mysql api中不可用,只能在mysqli或pdo中使用),或者必須加強轉義代碼。 – Shadow
@CapitalC但我仍然可以使用查詢內的函數嗎? – epidrollic