PHP включает числовой - PullRequest
0 голосов
/ 25 февраля 2009

Если я создаю свои страницы таким образом, я должен проверить, является ли news_id числовым в файле news.php? Или это безопасно?

index.php:

    if (ctype_digit($_GET['news_id'])) include('news.php');

news.php:

    $query = mysql_query("SELECT * FROM news WHERE news_id = $_GET[news_id]");
    $row = mysql_fetch_assoc($query);

    if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');

Ответы [ 4 ]

4 голосов
/ 25 февраля 2009

Другие ответы абсолютно верны, вы никогда не должны позволять вводить данные пользователем непосредственно в вашу базу данных или любую другую чувствительную область.

Вы должны проверить / очистить все входные данные из $ _GET, $ _POST и т. Д. ... Вы можете использовать встроенные в PHP функции фильтра или использовать встроенные в среду, такие как Cake PHP или Symphony, упростить обработку пользовательских данных.

У jonstjohn есть хорошее замечание, что вы оставляете себя открытым SQL-инъекцией таким образом, и другие формы атаки основаны на подаче вредоносного кода в ваше приложение.

Стоит прочитать 25 самых опасных ошибок программирования Джеффа Этвуда , чтобы немного рассказать об этих проблемах, а также о других.

2 голосов
/ 25 февраля 2009

Краткий ответ: Да, вы должны.

Кто-то может (и будет) запрашивать news.php, минуя index.php.

0 голосов
/ 25 февраля 2009
  1. Это не безопасно;
  2. Не проверять, преобразовать его в целое число, используя intval ();
  3. Никогда, никогда не помещайте переменные GPC в SQL без экранирования или приведения;
0 голосов
/ 25 февраля 2009

Вы действительно должны удалить свои данные и очистить их перед отправкой в ​​MySQL. Нет гарантии, что кто-то не попытается отправить что-то вредоносное через почтовые данные.

$news_id = (int)$_GET[news_id];

$query = mysql_query("SELECT * FROM news WHERE news_id = " . 
                      mysql_real_escape_string($news_id));
$row = mysql_fetch_assoc($query);

if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...