Если вы пришли на эту страницу из бюллетеня Tech Times , мы приносим свои извинения. Несколько наших ссылок пошли не так. Вы, вероятно, после одного из следующих действий:
- аргументы: странность JavaScript
- Mozilla Prism: застрял в середине с пользовательским интерфейсом
- Интегрированная среда выполнения Adobe: больше, чем просто AIR
Теперь вернемся к нашей обычной программе …
Вот скрипт PHP:
<?php
# Common include file for MySQL
require("auth_conn_inc_reg.php");
$valid = false;
if (isset($_SERVER['PHP_AUTH_USER']) &&
isset($_SERVER['PHP_AUTH_PW']) ) {
$sql = "SELECT * FROM users WHERE
logins='{$_SERVER['PHP_AUTH_USER']}' AND
password='{$_SERVER['PHP_AUTH_PW']}'";
$mysql_result = mysql_query($sql,$connection);
$num_rows = @mysql_num_rows($mysql_result);
if ( $num_rows != 0 ) {
$valid = true;
}
}
if ( !$valid ) {
header ("WWW-Authenticate: Basic realm="Restricted"");
header ("HTTP/1.0 401 Unauthorized");
echo "Authorization required";
exit();
} else {
# Valid user - do stuff here
}
?>
Найдите проблему?
Что меня огорчает, когда я это читаю, так это то, что это часть статьи в британском журнале Linux в этом месяце (я опущу название; иначе это хороший журнал). Конечно, все делают ошибки, я сам больше, чем несколько, но этот конкретный пример является классическим и частично объясняет, почему PHP нарушает безопасность.
Что нужно предпринять, чтобы остановить это снова и снова в будущем? Возможно, на http://www.php.net/mysql_query необходимо большое сообщение типа «Прежде чем использовать эту функцию, обязательно прочитайте о mysql_escape_string () . И, возможно, страница mysql_escape_string () могла бы сделать больше, чтобы объяснить, почему это важно?