Страница 289 из 478 else { header('WWW-Authenticate:Basic realm="Restricted Section"'):header('HTTP/1.0 401 Unauthori zed'); die ("Пожалуйста, введите имя пользователя и пароль"); } functi on mysql_entiti es_fix_stri ng(Sstring) { return html enti ti es (rr\ysql_fi x_stri ng( Sstri ng)); } functi on mysql_fi x_stri ng(Sstri ng) { if (get_magic__quotes_gpc()) Sstring = stripslashes(Sstring); return mysql_real_escape_string($string); } Вы, наверное, ожидали, что настало время для некоторых весьма больших по объему примеров кода. Но по этому поводу не стоит переживать. Последние 10 строк — не что иное, как пример 10.31, который уже встречался в главе 10. Эти строки присутствуют здесь для выполнения очень важной задачи — обезвреживания введенных пользователем данных. На данный момент практический интерес для вас должны представлять только те строки, которые выделены жирным шрифтом и начинаются с присваивания значений двум переменным — Sun_temp и $pw_temp с использованием отправленных имени пользователя и пароля. Затем выдается запрос к MySQL на поиск пользователя с именем Sun temp, и если будет возвращен результат, значение его первой строки присваивается переменной Srow. (Поскольку имя пользователя уникально, возвращена будет только одна строка.) Потом создаются переменные Ssaltl и $salt2 с двумя произвольными строками, которые затем добавляются до и после отправленного пароля Spw temp. После этого получившаяся в результате строка передается функции md5, которая возвращает 32-символьное шестнадцатеричное значение, присваиваемое переменной Stoken. Теперь остается лишь сравнить значение переменной Stoken со значением, хранящимся в базе данных в четвертой графе, которая при начале отсчета с нуля соответствует графе 3. То есть Srow[3] содержит предыдущую лексему, вычисленную для «посыпанного солью» пароля. Если значения совпадают, выдается строка приветствия, в которой содержится обращение к пользователю по его настоящему имени (рис. 13.4). В противном случае выдается сообщение об ошибке. Как уже упоминалось, это сообщение всегда содержит одну и ту же информацию независимо от того, существует такое имя пользователя или нет, поскольку потенциальный взломщик или тот, кто подбирает пароли, получает в результате этого минимум полезной для себя информации. Вы можете самостоятельно испытать эту программу в работе, вызвав ее в браузере и набрав имя пользователя bsmith и пароль mysecret (или набрав пару pjones и acrobat), то есть те значения, которые были сохранены в базе данных программой из примера 13.3.
|