(int) приводит строку из GET-переменной к целочисленному типу.
Если написать так:
CODE:
То я могу передать в переменной page что угодно сразу на выполнение в базу данных. Например, передав в этой переменной текст$sql = @mysql_query("SELECT * FROM x_name WHERE `$11` = $_GET[page] LIMIT 1")
CODE:
Я могу фактически удалить все данные из таблицы x_name. Разумеется, можно поправить любые пароли, хранящиеся в базе, добавить или удалить таблицы и т. д. Это была бы грандиозная дыра в безопасности.1; DELETE FROM x_name WHERE 1; SELECT * FROM x_name WHERE `$11` = 1
(int) сначала приводит строку к целочисленному типу (для строки, в которой содержится что-то, отличное от числа, возвращает 0). Таким образом, я уже не могу выполнить в твоей БД никакого кода, кроме того, который ты формируешь сам.
Точки - это сложение строк в PHP - я мог бы, разумеется, написать так:
CODE:
Результат был бы тот же. Но я поленился писать в две строки, объединив всё в одну. Разумеется, при сложении со строкой целое ((int)$_GET['page']) преобразуется обратно в строковое представление, но эта строка уже не будет содержать ничего, кроме цифр.
$page = (int)$_GET['page'];
$sql = @mysql_query("SELECT * FROM x_name WHERE `$11` = $page LIMIT 1");
$sql = @mysql_query("SELECT * FROM x_name WHERE `$11` = $page LIMIT 1");