LINUX.ORG.RU

[php]реализация авторизации админа

 


0

1

Задача стоит такая: у сайта есть лишь один пользователь который может что либо добавлять, изменять, назовем его админом, так вот его и нужно авторизировать, если авторизация успешна, то выводить контент для админа со всякими «добавить статью, изображение итп», если авторизация прошла фейлом то выводить просто контент доступный всем анонимным пользователям. Авторизацию я написал так как в голову пришло, особо не раздумывая. Интересует безопасность такой авторизации, да и вообще как улучшить, исправить?

Важно: авторизация должна быть именно через txt файл, без БД.

Сама реализация авторизации:

<?php
//ОБРАБОТКА ПАРОЛЕЙ
$injected_password = ($_POST['enter_password']);//принимаем введенный пароль
$read_password = file_get_contents('password.txt');//читаем файл с паролем

//БЛОК ВВОДА ПАРОЛЯ
$view_enter_password_block = '
<h2>Авторизация</h2>
<form enctype="multipart/form-data" action="addworks.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="31457280" />
<strong>Введите пароль:</strong><br>
<textarea name="enter_password" cols="60" rows="1"></textarea><br><br>
<input type="submit" value="Отправить" /><br><br>
</form>';

//БЛОК КОНТЕНТА
$view_content_block = '<div id="content"><h2>Авторизация прошла успешно</h2></div>';

//ЕСЛИ ВВЕДЕННЫЙ ПАРОЛЬ
if ($injected_password == $read_password) {
	echo $view_content_block;//совпадает с тем что в password.txt, то выводим блок контента
}
else {
	echo $view_enter_password_block;//не совпадает с тем что в password.txt, то выводим блок ввода пароля
}
?>



Последнее исправление: viktorzinchuk (всего исправлений: 1)

А нормальных темплейтов из коробки в php так и не появилось?

Исправить... даже и не могу сказать, что именно.

deb
()
Ответ на: комментарий от viktorzinchuk

Всем. Я даже затрудняюсь сказать, чем он хорош.

А для обучения и создания нормальных, при этом по нормальной культуре разработки, приложений, bottle.py намного лучше.

deb
()

1)Пароли в текстовике ханить хешированые 2)Авторизация со стороны клиента только по ssl 3)в целом $_POST['enter_password'] перед тем как юзать не пролохо бы проверить что там на подобии htmlspecialchars, но на этом куске необязательно

А так в целом для сверического коня в вакуме подойдет что угодно, хоть так.

TheMixa ★★★
()

Обычно авторизация делается так. POST на страницу, которая проверяет логин/пароль, устанавливает cookie и делает редирект с кодом 303 на страницу, где будет информация. Т.е. POST не возвращает данные, он отдает страницу с кодом 303.

По мелочам.

В чем прикол enctype=«multipart/form-data», почему бы не показать обычную форму?

Смысл строчки <input type=«hidden» name=«MAX_FILE_SIZE» value=«31457280» /> тоже остался непонятен.

<textarea name=«enter_password» cols=«60» rows=«1»></textarea> Почему textarea, а не input type=«password»

Ну и еще одна подсказка полезная для тех, кто не пользуется готовыми фреймворками: любые запросы, которые приведут к изменению данных на сервере (авторизация, публикация комментария, удаление комментария, голосование, плюсик в карму) все это делается через POST, который возвращает редирект 303 на страницу, где будут заново сгенерированы данные (если через AJAX, то тоже только POST'ом - любые изменения делаются только через POST). GET только для запроса данных, но не изменения (обычные страницы, поиск по сайту...).

В общем этот php файлик нужно написать таким образом: вначале делаешь if для GET и POST, в GET ветке if'а проверяешь куку и если не совпала отдаешь форму, иначе (пользователь авторизован, но зачем-то пришел на страницу авторизации) делай что сам придумаешь, в POST ветке после проверки пароля, генеришь уникальную непредсказуемую куку и сохраняешь ее в файл (но это велосипед еще тот, в php есть сессии, но в это случае сессия будет сохраняться не в нужной тебе папке, а где у php настроено) и после создания сессии делаешь редирект на адрес, где будут содержимое. Таким образом по URI для авторизации ты выдаешь либо форму для авторизции, либо принимаешь POST (с авторизацией и редиректишь на страницу с данными. Страница с данными на отдельном URI.

anonymous
()
Ответ на: комментарий от deb
Ответ на: комментарий от deb

Учись лучше на чём-нибудь нормальном:

http://bottlepy.org

Да лучше сразу Pyramid + ZODB + Chameleon/ZPT. По скорости не намного медленее bottle.py, а по функционалу я даже боюсь сравнить.

resurtm ★★★
()
Ответ на: комментарий от resurtm

Забей. У него непроходящий баттхёрт :) Уж не знаю, что с ним злые PHP-шники сделали :)

KRoN73 ★★★★★
()
Ответ на: комментарий от viktorzinchuk

Не знаю, я чайник в php, учусь пока...

Зы, а чем php то плох?

Если именно PHP, то возьми CodeIgniter и посмотри на более или менее средненький фреймворк, а потом, когда освоишься с ним, то сваливай на Symfony2 или Yii.

Если все равно, то Pyramid бери сразу (Django пробовать не надо — станешь типичным Django-boy'ем).

resurtm ★★★
()
Ответ на: комментарий от resurtm

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

Twig - это, конечно, круто, я даже удивился, когда узнал, что такое есть в PHP, но человек только извлекает пароли из текстового файла. И УЖЕ УЧИТСЯ писать неправильно.

На bottle.py он бы такому не научился.

deb
()
Ответ на: комментарий от resurtm

Да лучше сразу Pyramid + ZODB + Chameleon/ZPT. По скорости не намного медленее bottle.py, а по функционалу я даже боюсь сравнить.

Человек только осваивает web-программирование.

deb
()

Не слушай товарища «deb», его кто-то укусил наверно.

А самые лучшие решения обычно уже написаны. Поэтому посмотри исходники этой штуки или попробуй ее подключить к своему проекту

anonymous
()
Ответ на: комментарий от anonymous

symfony / Security
попробуй ее подключить к своему проекту

гыгы.отличный совет.

ТС честно признался что чайник, а вы ему советуете прикрутить модуль в 150килобайт зазипованных сырцов из высокоуровневого фреймворка.

kelyar ★★★★★
()
Ответ на: комментарий от anonymous

Ну и еще одна подсказка полезная для тех, кто не пользуется готовыми фреймворками: любые запросы, которые приведут к изменению данных на сервере (авторизация, публикация комментария, удаление комментария, голосование, плюсик в карму) все это делается через POST

Годный совет для сферических сайтов в вакууме. Удачи при посылке AJAX запросов через POST на чужие/с чужих доменов.

SOmni ★★
()
Ответ на: комментарий от deb

Всем. Я даже затрудняюсь сказать, чем он хорош.

Хорош уже плавать по лору на волнах собственного жира...

VirRaa ★★★
()
Ответ на: комментарий от VirRaa

Хорош уже плавать по лору на волнах собственного жира...

Я правильно понял, что ответа на вопрос «чем хорош php, как язык разработки» не будет?

deb
()
Ответ на: комментарий от deb

Я правильно понял, что ответа на вопрос «чем хорош php, как язык разработки» не будет?

Этих ответов по интернету пруд пруди. Если тебе нужны ещё, то ты просто глуп, и не способен искать информацию. В миллион тысячу пятисотый раз об этом говорить смысла нет.

Так что либо жир, либо ноль ума.

VirRaa ★★★
()
Ответ на: комментарий от VirRaa

Этих ответов по интернету пруд пруди. Если тебе нужны ещё, то ты просто глуп, и не способен искать информацию. В миллион тысячу пятисотый раз об этом говорить смысла нет.

Этот аргумент можно вообще на любой вопрос дать. Тут даже минус два ума хватит. Рассуждать по-существу - это удел более разумных существ.

deb
()
Ответ на: комментарий от deb

Рассуждать по-существу - это удел более разумных существ.

По-существу, в сотый раз? Удел разумных? Не-а, ты ошибаешься. Извини что огорчил.

VirRaa ★★★
()
Ответ на: комментарий от viktorzinchuk

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

TheMixa ★★★
()
Ответ на: комментарий от deb

Я правильно понял, что ответа на вопрос «чем хорош php, как язык разработки» не будет?

Для начала предложи альтернативу для state-less скриптов ака запрос-инициализация-работа-ответ-разрушение а потом посмотрит чем он плох и хорош.

Если коротко: простота, наглядность, легкость, популярность. Каждый язык хорошь в своей сфере, решает все соотношение времени и ресурсов, если они конечно у вас не безграничные.

TheMixa ★★★
()
Ответ на: комментарий от TheMixa

Если коротко: простота, наглядность, легкость, популярность.

Ты уверен что это плюсы?

jessey
()
Ответ на: комментарий от TheMixa

Для начала предложи альтернативу для state-less скриптов ака запрос-инициализация-работа-ответ-разрушение а потом посмотрит чем он плох и хорош.

Чем эта схема хороша? Кроме постоянных затрат на создание окружения на каждый чих.

Если коротко: простота, наглядность, легкость, популярность.

Bottle.py проще, если не знать никакого языка. Python вообще проще для обучения, чем C-подобный синтаксис php. За примерами - в любое сравнение, где сравниваются одинаковые программы на php и python. В bottle.py сразу есть роуты и шаблоны, а в php есть только серверо-специфические роуты, которые работают только в своей собственной среде.

Чем php нагляднее python? Что в нём вообще наглядного? Большинство php-кода вообще смотреть страшно. Можно сравнить оф. документацию по php и по python, чтобы понять, где что нагляднее.

Что такое «лёгкость»? В граммах? У меня bottle.py проект кушает 4 мб памяти, ну ещё nginx что-то кушает. А php столько на процесс, коих в памяти почему-то висело много (я в специфике не разбирался, и не знаю, сколько надо и почему).

Популярность? В python есть библиотеки для всего, чего можно, и чего нельзя. Можно на единой базе легко делать и web-интерфейс и gui. Веб-фреймворков - на все вкусы и цвета (мне так и не показали аналог bottle.py на php, хотя хотелось бы - иногда бывает нужно и на php что-то набросать). И искать-ставить эти библиотеки проще. Плюс легко делать среды каждая со своим набором библиотек. Так что популярность особо ничего не даёт - в python легко задействовать pygame для формирования красивых картинок для веб-сайта, а в php - нет.

deb
()
Ответ на: комментарий от deb

Чем эта схема хороша? Кроме постоянных затрат на создание окружения на каждый чих.

Хороша тем что она проста. Во многих случаях существенный оверхед на создание окружения в типичном проекте следствие плохого кода(перегружен идеализмом и тотальной ООП-изацией всего и вся).

Можешь так же писать аналогичные велосипеды для сокращения оверхеда и на PHP(скептически отношусь к такой возможности).

bottle.py vs PHP

Браво! Мы будем теперь сравнивать узкоспециализированый фреймворк с интерпретатором?

мне так и не показали аналог bottle.py на php

Ну неуловимый джо он на то и неуловимый.

Никто ведь не заставляет страдать фанатизмом и использовать свой идеальный язык? Выбирай компиляторы и инетрпретаторы под задачи, а не наооборот.

Популярность? В python есть библиотеки для всего

Смелое утверждение. так же как и приподношение наличия какихто фреймворков в плюсы интерпретатору, про удобства установки бибилотек и средств которые можно смело в IMHO переквалифицировать.

З.Ы. Если есть у проекта критичная часть к оверхеду то почемубо вообще не вынести ассинхронное(чего на самом деле в Python и нет как раз) «statefull-ядро» в проект на C/C++ подключив к нему например любой интепретатор(JS, Python, LUA) для логики, а все критичные к производительности функции(БД, вычисления, линейны процессинг данных) вызывать интерпретатором из сишного ядра.

Да, данная схема неоправданно сложна и избыточна во многих случаях. Но точно так же и с python vs php. Нравится писать на python - пожалуйста, но не стоит так смело утверждать что аналогичный код на другом языке писать сложнее и менее эффективно.

TheMixa ★★★
()
Ответ на: комментарий от TheMixa

Браво! Мы будем теперь сравнивать узкоспециализированый фреймворк с интерпретатором?

Для 90% задач, которые решают на php, bottle.py будет гораздо проще и в несколько раз меньше кода. Почему бы и не сравнить?

Если есть у проекта критичная часть к оверхеду то почемубо вообще не вынести ассинхронное(чего на самом деле в Python и нет как раз) «statefull-ядро» в проект на C/C++ подключив к нему например любой интепретатор(JS, Python, LUA) для логики, а все критичные к производительности функции(БД, вычисления, линейны процессинг данных) вызывать интерпретатором из сишного ядра.

Много писать? Если это интернет-магазин по продаже селёдки, где нужны свои функции, то проще написать на bottle.py, чем написать с нуля на php или сильно переделать незнакомый движок.

Нравится писать на python - пожалуйста, но не стоит так смело утверждать что аналогичный код на другом языке писать сложнее и менее эффективно.

Я не говорю, что нравится. Я говорю, что для указанных задач - намного проще.

deb
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.