2009-02-25 2 views
0

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

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.'); 

ответ

2

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

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

0

Вы действительно должны избегать ваших данных и дезинфицировать их перед отправкой в ​​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.'); 
+0

-1. ваш код является избыточным, и кажется, вы просто не знаете, что он на самом деле делает. –

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

Что значит преобразовать его в целое? Как мне это сделать? –

+0

$ news_id = intval ($ _ GET ['news_id']); – vartec

4

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

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

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

Стоит прочитать Jeff Atwood's 25 most dangerous programming mistakes за немного фона по этим вопросам и другие, кроме того.