Лучшие способы защитить данные формы от злоумышленников, использующих Firebug? - PullRequest
4 голосов
/ 25 мая 2011

Я прочитал пару из связанных вопросов по этому вопросу, но они не отвечают на мой вопрос напрямую. Инструменты разработчика, такие как Firebug, позволяют любому просматривать и манипулировать данными формы перед отправкой формы. Хорошим примером этого является корректировка значения скрытого поля «идентификатор участника», чтобы отправка формы зачислялась другому пользователю.

Каковы наилучшие способы предотвращения взлома этого типа? Мое исследование предлагает перенести ввод чувствительных форм в сценарий на стороне сервера, но есть ли другие варианты или соображения?

Я знаком с PHP и jQuery, поэтому мое идеальное решение будет использовать один или оба этих языка.

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Вот несколько основных предложений:

  • Необходимо проверить входные данные формы, используя скрипт на стороне сервера (PHP).

  • Вместо того, чтобы полагаться на конфиденциальную информацию, такую ​​как идентификатор участника, из формы, которую вы могли бы вместо этого кэшировать такие данные в сеансе вашего сервера.Таким образом, злоумышленник не сможет изменить данные на лету.

Вы все еще можете использовать проверку jQuery для удобства, чтобы поймать основные проблемы ввода, но вы можете только доверие данные, которые проверяются с использованием кода на стороне сервера.

1 голос
/ 25 мая 2011

Вы не можете использовать jQuery для безопасности, так как все это обрабатывается на стороне клиента.

В вашем примере просто используйте PHP-сессию вместо скрытого поля ввода, потому что, как вы правильно заметили, это может бытьманипулировать.

Использование сессий будет выглядеть примерно так:

страница входа

<form action="login.php" method="post">
  <input type="text" name="username">
  <input type="password" name="password">
  <input type="submit" name="submit" value="submit">
</form>

login.php

// you have to include this on every page to be able to user sessions.
// also make sure that you include it before any output
session_start();

//Always sanitize the user input before doing any db actions.

//For example by using: `mysql_real_escape_string()` ( http://php.net/manual/en/function.mysql-real-escape-string.php ).

// check user credentials against db

$_SESSION['user'] = $dbresult['username'];

page-where-userid-is-required.php

session_start();

if (!isset($_SESSION['user'])) {
    // user is not logged in!
} else {
    // use user info to place order for example
}

Сеанс будет активным до тех пор, пока пользователь не закроет свой браузер / пока не истечет время сеанса (что является настройкой PHP)

Выше приведено только несколькопример кода, чтобы дать вам представление.

Он работает с небольшими проектами, однако, поскольку проекты становятся все более сложными, я бы предложил пойти по пути MVC (Model, View, Controller).(http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)

Но это совсем другая история:)

...