Практическое решение побега заключается в следующем:
$blah = mysql_real_escape_string($blah, $connection);
$num = (int)$num;
$sql = "select * from `test` where foo = '$blah' and num_col = $num";
Каждый раз, когда вы вставляете переменную в строку SQL, ее необходимо экранировать. Без исключений. Вы должны сделать это как можно ближе к точке, в которую он встроен, чтобы упростить проверку того, что это происходит, когда вы проверяете код.
Если у вас есть только одно соединение, вы можете определить свою собственную функцию:
function qescape($var)
{
global $connection;
return mysql_real_escape_string($var, $connection);
}
У меня большая проблема с этим заявлением, которое вы сделали:
mysql_query не выполняет два запроса одновременно, поэтому злоумышленник не может использовать такие вещи, как
Хотя это технически верно, они могут выполнять любые другие неприятные действия без необходимости выполнять несколько запросов. Хороший хакер, вероятно, сможет просматривать, изменять и вставлять практически все, что они хотят, в вашу базу данных, даже не имея возможности выполнять несколько запросов.