У меня есть полностью настраиваемый сайт PHP с большим количеством вызовов базы данных. Я только что получил инъекцию. Этот небольшой кусок кода ниже обнаружился на десятках моих PHP-страниц.
<?php /**/ eval(base64_decode(big string of code....
Я был довольно осторожен с моими вызовами SQL и тому подобным; все они в этом формате:
$query = sprintf("UPDATE Sales SET `Shipped`='1', `Tracking_Number`='%s' WHERE ID='%s' LIMIT 1 ;",
mysql_real_escape_string($trackNo),
mysql_real_escape_string($id));
$result = mysql_query($query);
mysql_close();
Для записи я редко использую mysql_close()
в конце, хотя. Это просто код, который я схватил. Я не могу вспомнить ни одного места, где бы я не использовал mysql_real_escape_string()
, (хотя я уверен, что, вероятно, есть пара. Я скоро поищу, чтобы выяснить это). Там также нет мест, где пользователи могут вставить пользовательский HTML или что-нибудь еще. Фактически, большинство доступных пользователю страниц, если они вообще используют вызовы SQL, почти неизбежно являются SELECT * FROM
страницами, которые используют GET или POST, в зависимости.
Очевидно, мне нужно усилить свою безопасность, но у меня никогда не было подобных атак, и я не уверен, что мне следует делать. Я решил наложить ограничения на все свои данные и проверить, не пропустил ли я где-нибудь mysql_real_escape_string
. У кого-нибудь еще есть предложения?
Кроме того, что делает этот тип кода? Почему это там?