После того, как я знал, как обеспечить загрузку изображения. В обход полей ввода форм для загрузки нежелательных файлов я хотел бы привести еще один пример из 2 поданных файлов , один из них скрыт.
Таблица SQL (id, name, jod, number)
CREATE TABLE `users` ( `id` bigint(20) unsigned NOT NULL auto_increment, `name` varchar(255) default '0', `job` varchar(255) default NULL, `number` varchar(255) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Код формы (элемент поддержки отредактирует собственную информацию)
<form action="send.php" method="post" name="send" id="send"> <input type="text" name="name" id="name" value="John"/> <input type="text" name="job" id="job" value="Plumber"/> <input type=hidden name="number" id="number" value="1234"/> <input type="Submit" name="Submit" value="Submit"/> </form>
Позже появилось расширение firefox, которое может обойти различные входные данные на стороне сервера, минуя проверку, и может нанести большой урон, поэтому здесь он может остановить весь процесс и сделать возможным изменить значение скрытого number
таблицы на любое value="1"
например, value="1"
результате чего информация об обновлении для члена имеет это value number 1
.
Это расширение работает следующим образом: оно может подделывать входные данные перед передачей на сервер.
PHP Code Send.php
if(isset($_POST['send'])){ $name = mysql_real_escape_string($_POST[name]); $job = mysql_real_escape_string($_POST[job]); $number = mysql_real_escape_string($_POST[number]); $sql= "update users SET name='$name',job='$job' WHERE number='$number'"; mysql_query($sql) or die("query failed: $sql".mysql_error()); echo "Update Done"; } else { echo "Nothing to update"; }
Вопрос: Как тогда защитить эту простую форму от такой входной формы? ~ Спасибо
эти проблемы действительно больно, потому что это сделало мой сайт бесплатным для взлома 🙂
Если авторизация пользователя не является выбором в вашей причине, вы можете попробовать следующие методы:
Конечно, это добавило бы дополнительные шаги при отправке формы HTML и проверки информации о сообщении, но, по крайней мере, было бы намного труднее для злоумышленника подделать действительный номер в сообщении. Хотя это не спасет вас, если злоумышленник знает зашифрованный / хешированный номер другого пользователя, если только не соленостная информация с скрытым полем не используется.
Вы не можете контролировать, какие данные люди представляют на ваш сервер.
Вы должны проверить на сервере, чтобы узнать, разрешено ли пользователю видеть информацию или внести изменения, которые они просят.
Например:
способный редактировать значение скрытого номера таблицы для любого значения, такого как value = "1", в результате чего информация об обновлении для члена имеет это значение номер 1.
Процесс будет примерно таким:
Если у вас есть форма и любые пользователи для редактирования значений, эта проблема будет там. Лучший подход заключается в аутентификации пользователей. Разрешить только пользователям, которые вошли в систему с учетной записью, внести изменения в соответствующие учетные записи.
Кроме того, не используйте mysql_query или что-то вроде mysql_ *, они небезопасны и обесцениваются в php5.