Конечно если авторизация происходит на SSL риски того, что пароль будет перехвачен при помощи снифера становятся ничтожными. Но все же, такой вид авторизации не везде используется. Один из видов защиты — это содержание пароля в виде хеша. Но ведь при авторизации пароль оправляется в POST запросе на сервер и существует шанс его выловить. Поразмыслив, я решил попробовать реализовать схему авторизации при которой пароль не будет отправляться на сервер в том виде в котором он есть. И даже не его MD5 хеш. В планах было что то подобное алгоритму ms-chap.
А именно:
1) При посещении сайта неавторизированному пользователю в куке выдается уникальный id.
2) Если пользователь решил авторизоваться, при заполнении пароля генерируется хеш на базе md5 хеша его пароля и выданного ему со стороны сервера id.
3) После попытки авторизации, вне зависимости от ее итогов, id перезаписывается.
Что мы получаем в итоге? При каждой попытке авторизации генерируется новый хеш отличный от предыдущего и вылавливать его смысла нету.
Итак приступим:
Так как статья не подразумевала готового кода а больше ориентировалась на алгоритм и логику, указаны только те басовые моменты на которых основывается реализация данной логики. Суть тут больше в алгоритме а окружение каждый строит по своему.
Итак в корне сайта пользователю присваивается «соль» которая генерируется в самом начале, а так же после каждой попытки авторизации.
session_start();
//Присваиваем значение уникальный id если отсутствует
if(!isset($_SESSION['uniq'])||$_SESSION['uniq']=='')
{
$_SESSION['uniq']=uniqid();
}
?>
Далее в форме логина:
<form action="" method="post">
//поле ввода логина
<input type="email" placeholder="E-mail" name="login">
//поле для ввода пароля
<input id="pass" type="password" placeholder="Пароль" >
//скрытое поле в котором генерируется хеш пароля
<input id="hidpass" type="hidden" name="password" value="" >
//кнопка ввода
<button type="submit" >Войти</button>
</form>
//Функция генерации хеша
<script>
$(function () {
$("#pass").on("input",function(e){
//При вводе данных в поле пароля автоматически происходит кодирование их в MD5 добавляется уникальный id и еще раз кодируется после чего присваивается к скрытому полю для дальнейшей отправки
var pass=CryptoJS.MD5($('#pass').val())+'<?php echo $_SESSION['uniq']?>';
var md5pass=CryptoJS.MD5(pass);
$('#hidpass').val(md5pass.toString());
});
});
</script>
Как получаем постоянно меняющийся пароль, разобрались, осталось разобраться что с ним делать.
После отправки формы мы попадаем в функцию проверки логина и пароля. Тут тоже на вкус и цвет фломастеры разные. В моем случае вместо формы вызывается функция авторизации после итогов которой страница просто обновляется и если авторизация была успешной то мы попадаем в наше рабочее пространство. Если же итог неудачный, то мы снова глядим на форму входа.
function CheckLogin($login,$md5pass)
{
//Получаем пароль из базы данных
$pass="MD5 пароль из базы данных" ;
//Прибавляем к ней уникальный id полученный в индексе при посещении
$pass.=$_SESSION['uniq'];
//Получаем хеш этой гремучей смеси
$pass=md5($pass);
//Удаляем уникальный id чтоб в следующий раз пароли опять получились новые
unset($_SESSION['uniq']);
//Ну и сравниваем хеш
if(strcmp($md5pass,$pass)==0)
{
echo "Авторизация прошла успешно. Если вы не переместились на страницу обновите ее";
$_SESSION['id']=session_id();
}
//Обновляем страницу удобным нам способом
.......
}
UPD: Статья предполагала не сам код, а алгоритм реализацию которого каждый видит по своему. А не для развода холивара на тему «скопировал образовалась дырка и вообще нифига не пашет» и скобки криво стоят. Но так как все комментарии уперлись именно в это пришлось убрать кот который был примитивным и подразумевал действия на не инструкции.
Комментарии (113)
zenn
29.07.2017 23:05+12Идея, конечно, может быть и имеет смысл (шифровать пароль еще на клиенте) с какой либо солью, но вот качество излагаемого вами кода… Это нечто. Давайте взглянем поближе, самый шедевральный момент:
$db->CheckLogin($_POST['login'],$_POST['password']); // ... function CheckLogin($login,$md5pass) { $STH=$this->db->query("select password from users where email='$login'"); }
и вы еще беспокоитесь о MITM? Как можно использовать PHP::PDO, но игнорировать preparedStatement? А что будет, если юзер в $_POST['login'] забьет нечто подобное:
script.php?login=0'+union+drop+table+users+--+
Ну и далее:
strcmp($md5pass,$pass)==0
почему сравнение используете без типа? Вроде как strcmp может вернуть -1 0 1 и только… Вы ожидаете false и '0'?
А что происходит тут? Зачем вы подключили целую jquery?
//Обновляем страницу echo "<script src="js/jquery.min.js"></script>"; echo " <script> $( document ).ready(function() { location.reload(); }); </script> ";
window.location.reload() вызывается без всяких там $(document).ready(), это вполне себе стандартная javascript фу-ия еще со времен царя гороха… Да и вообще, если вы уже пишите обработчик на php, то почему не используете header(«Refresh:0»);…
И таких огрехов по коду достаточно. Вам следовало бы подготовится немного получше, перед публикацией подобной статьи, хабр все же не gist.github.com…RomanPogosyan
30.07.2017 00:05-10Отвечу от конца к началу:
header(«Refresh:0»); ответит невозможностью модификации.
ну с jQuery может и переборщил.
Получение пароля из базы примитивно для наглядности как и весь код. Я согласен с вами, тут не github, в статье представлена логика с примитивной реализацией.
AlexLeonov
30.07.2017 00:14-2if(!isset($_SESSION['uniq'])||$_SESSION['uniq']=='') $_SESSION['uniq']=uniqid();
Нет фигурных скобок. Минус балл.
require_once('engine.php');
Использование относительного пути — минус балл. Неиспользование composer — еще минус балл.
У вас уже «двойка», продолжаем.
$engine = new Template("tpl/");
Еще один относительный путь. Не говоря уж о том, что папка, где находятся шаблоны — не зависимость для шаблонизатора. Впрочем, вряд ли вы вообще понимаете слово «зависимость».
require_once('libs/mysql.php');
Господи, можно я не видел этого?
$db=new Database_Module(); ... $db->CheckLogin();
Полное наплевательство на стандарты стиля кода. Еще минус балл. У вас уже «кол».
function CheckLogin(); ... $STH=...
Ноль.
echo "<script src="js/jquery.min.js"></script>";
Вы это вообще серьезно?
P.S. Как там дела, в 2001 году?
RomanPogosyan
30.07.2017 00:29-5На счет фигурных скобок. Они не обязательны, если после логики только одно действие
zelenin
30.07.2017 02:32+7по psr обязательны.
serginhold
30.07.2017 12:48+2Код конечно тот ещё, но фанатики psr прям выбешивают иногда, psr это не стандарты, это рекомендованные стандарты, в которых куча нелогичных вариаций в похожих конструкциях, например тот же идиотизм скобок
class A { }
if (true) { }
вот эту клоунаду я никогда не поймуAlexLeonov
30.07.2017 14:29+1А что тут непонятного?
После ключевого слова class и до фигурных скобок возможны еще ключевые слова: extends, implements. Поэтому скобку пишем сразу на новой строке, чтобы не дёргать ее потом туда-сюда.
После условия в if уже ничего не может быть, кроме фигурной скобки. Поэтому пишем ее на той же строке, чтобы случайно ничего не написать между условием и "}".
Всё логично.NLO
30.07.2017 14:51НЛО прилетело и опубликовало эту надпись здесь
AlexLeonov
30.07.2017 14:57-2После условия в if может быть и одно выражение на той же строке.
Вам уже прозрачно намекали, что в промышленном коде такое невозможно и обычно приводит к выпиливанию из команды, если вы будете продолжать настаивать на своём праве не соблюдать общепринятые стандарты.
Зачем вообще обсуждать скобки и пробелы? Не нравится подход PSR — не пишите на PHP публичный код, делайте свои домашние странички, где никто вас не упрекнёт за отсутствие скобок. Хотите выкладывать свой код в паблик — будьте любезны соблюдать публичные стандарты.
Вам не кажется такой подход логичным?NLO
30.07.2017 15:07НЛО прилетело и опубликовало эту надпись здесь
alexey-m-ukolov
30.07.2017 15:13Проблема в том, что этот бред по каким-то причинам стал стандартом. Общепринятые — значит, что с ним согласны больше 50% программистов? Но что если больше 50% программистов — говнокодеры?
Эти стандарты принимала довольно большая группа компетентных разработчиков, пишущих фреймворки и библиотеки.
serginhold
30.07.2017 15:11+2Вам уже прозрачно намекали, что в промышленном коде такое невозможно и обычно приводит к выпиливанию из команды, если вы будете продолжать настаивать на своём праве не соблюдать общепринятые стандарты.
северокорейская компания?
все погибнут от:
if ($flag) throw new Exception();
?alexey-m-ukolov
30.07.2017 15:14-2От заряженного пистолета тоже никто не погибнет, пока на курок не нажмут, но это не повод разбрасывать их по городу.
dopusteam
30.07.2017 17:13+5Не холивара ради, но код без скобок больше подвержен ошибкам при изменении. Надо всегда держать в голове "если там одно действие, то добавить скобки".
В моей практике было несколько случаев, когда при изменении кода, забывали добавить скобки. Отловить ошибку иногда бывает очень сложно.
Главный императив разработки ПО — управление сложностью. Я думаю, что в эту сложность можно вкладывать и сложность поддержки. Чем меньше лишних условий, не относящихся к цели модифицирования кода, требуется учесть, тем лучше. Если я меняю ветку if, я не хочу усложнять себе задачу, проверяя наличие скобок.
alexey-m-ukolov
30.07.2017 15:10-1Стандарт (любой, не только PSR) состоит из двух частей:
- Защита от выстрела в ногу. Сюда относится правило «всегда оборачивать тело условия в фигурные скобки, даже если там одно выражение». В худшем случае вы потратите в файле на две строки больше. Но файлы безразмерные, а строки в них бесплатные. Зато вы гарантированно избежите проблем в будущем, а в качестве бонуса получите более понятные дифы в коммитах.
- Вкусовщина. «Табы vs пробелы», «где и сколько пробелов ставить» и т.п. Она нужна, чтобы избавить нас от впадания в bikeshedding. Да, можно долго об этом спорить и что-то кому-то доказывать, но зачем? В конечном итоге никому пользы это не принесёт и никакого влияния на код не окажет. Я когда-то тоже часами настраивал пробелы, скобочки и переносы в редакторе для автоформатирования. А потом нажал там волшебную кнопочку «использовать PSR» и сэкономил себе кучу энергии и времени.
Zenitchik
30.07.2017 17:33она просто занимает лишнюю строку.
Более того — неудобно сворачивается в редакторах.
serginhold
30.07.2017 15:06+1для меня логично
if (true) { }
1. потому что так проще глазами читать код
2. потому что одинаково с class
Да и к тому же:
После условия в if уже ничего не может быть, кроме фигурной скобки. Поэтому пишем ее на той же строке, чтобы случайно ничего не написать между условием и "}".
Случайно можно написать все что что угодно и где угодно
$f = function () use ($a) { }
function B { }
Почему везде по разному? Я тут ничего логического не вижу. Что можно случайно не написать или написать после объявления функции?
По этому пишу всегда и везде:
{ }
Zenitchik
02.08.2017 17:12Я предпочитаю всегда писать открывающую фигурную скобку на той же строке, а закрывающую — всегда оставлять на строке в одиночестве. По простой причине — привычные мне редакторы показывают такую конструкцию в свёрнутом виде лучше, чем другие варианты оформления кода.
П.С. Я на PHP не пишу, может, пхпшники другие редакторы используют.
SerafimArts
02.08.2017 18:20PHP, как и Go (ну и в Java уже исторически сложилось) — это те языки, где общественностью принят один единый стандарт. Ныне ещё JS потихоньку подбирается к этой стадии...
В любом случае, я хочу донести простую мысль: PHP — это не тот язык, где дозволяется/поощряется отсебятина на уровне опенсорсных или коммерческих проектов.
SerafimArts
02.08.2017 18:28TL;DR; Если X является частью интерфейса — перенос скобочек нужен, если частью тела функции/метода — нет.
Подробнее:
1а) В одном случае декларация статической структуры (сборка на уровне компиляции)
1б) В другом динамической (на уровне рантайма)
2а) Методы реализуют интерфейс (подразумевается семантический, а не кейворд-структура) класса, содержат докблоки и визуально отделяются этой отбивкой.
2б) Анонимочки же не предоставляют интерфейс и визуально выглядят более "плотно", т.к. являются, либо аргументом другой функции/метода, либо частью тела функции/метода.
P.S. Код, который оформлен по PSR позволяет на порядки быстрее ориентироваться в интерфейсе структур. И это вполне логичное утверждение.
Goury
30.07.2017 12:48А с какого перепугу само PSR стало обязательным?
Кучка каких-то мутных личностей решила за весь мир кому как можно жить?zelenin
30.07.2017 12:59+8писать по PSR так же необязательно, как писать поддерживаемый, легко читаемый код или пользоваться лучшими практиками, придуманными какими-то мутными личностями.
Goury
30.07.2017 14:14Ситуации «пользоваться лучшими практиками» и «пользоваться чем угодно, не понимая зачем это надо» — совсем разные.
Вы культ самолётников навязываете тут, а не практики применяете.salabon
31.07.2017 11:33Вот полностью поддерживаю.
Последнее время развелась куча «диванных Системных архитекторов», недавно закончивших курсы/школы программирования, и минусующих только за несоблюдение каких-то стандартов )Goury
31.07.2017 11:53Угу. Можете полюбоваться на мою карму как следствие констатации факта предназначения пеп8 исключительно для внутренних нужд самого питона.
salabon
31.07.2017 12:11Хабр несомненно хороший ресурс.
Но, лично для меня, «карма на хабре», давно не является показателем компетентности разработчика.
Именно из-за таких ситуаций.
alexey-m-ukolov
31.07.2017 13:12Может, всё-таки, карму слили за комментарии в подобном тоне?
P.S. Хотя, что это я, вам там уже всё подробно объяснили.alexey-m-ukolov
31.07.2017 13:28Карма, конечно, вещь странная — вот автору статьи её слили совершенно незаслуженно — он никому не грубил и откровенных глупостей не писал. Да, статья слабая, но её и надо оценивать, а не в карму минусовать с первых минут.
А вот вы свои минуса заработали своим хамством, а не точкой зрения, отличной от большинства, тут у меня никаких сомнений.RomanPogosyan
31.07.2017 14:12Ничего страшного :) первый блин всегда комом. А резкая критика кода, это в принципе отличительная черта многих программистов, так как у них в основе заложено БЛОК СХЕМА -> СТАНДАРТЫ -> КОД. А я не программист просто «люблю поэкспериментировать». Профиль мой «автоматизированные системы управления» и по этому моя стезя ЗАДАЧА->БЛОК СХЕМА а дальше программисты сделают :) По этому в моем коде не то «КАК СДЕЛАТЬ», а «ЧТО СДЕЛАТЬ». Результат думаю наглядный.
dopusteam
30.07.2017 12:43+5<input id="hidpass" type=hidden name="password" value='' >
-1
В одной строке вариант написания атрибутов с одной кавычкой (value=''), с двумя (name=«password») и вообще без них (type=hidden)
AlexLeonov
30.07.2017 13:02+4Уважаемый RomanPogosyan и его «коллеги»! Вы можете сколько угодно гадить мне в карму — я переживу.
Вы никак минусами не отмените того факта, что код в статье ужасен. Он не просто ужасен — он недопустим, даже начинающие студенты не имеют право делать такие грубые ошибки. И вам это уже сказали много раз десятки людей. Вы же не только себя на хабре уничтожили, вы всех php-программистов подводите, заставляя тех, кто читает вашу статью думать, что они все такие!
Правильно где-то выше написали — это диверсия какая-то.RomanPogosyan
30.07.2017 13:37+1Уважаемый AlexLeonov я еще никому в карму ничего не ставил, a гадить тут походу в моде
AlexLeonov
30.07.2017 14:27Может и не вы, но поклонников, которые считают, что главное, что «код работает», у вас тут много. А мне потом приходится переписывать такой код и перевоспитывать таких людей.
salabon
31.07.2017 11:40Я не знаю, конечно, насколько вы хороший «учитель».
Но по моему опыту: «Кто умеет делает — кто не умеет учит».
1. Изначально начали Вы, ставить «двойки и колы» за статью, в которой написано, что код просто для наглядности.
2. Да, главное что код работает. Это и отличает разработчика от кодера.
Кодеров пруд пруди, после таких вот «учителей». Они «винитки в машине» и не имеют никакой ценности. Так, Личинка разработчика…
Разработчик же понимает, что стоит за этими стандартами, из чего они следуют и почему так лучше в данной ситуации. И понимает он это исходя из собственного опыта, а не потому, что так написано в стандарте, принятом какими-то чуваками.
На счёт стандартов — это не больше, чем рекомендации.
То же самое относится и к «публичности кода», как писали ниже.
Грустно, когда люди, вместо обсуждения твоего подхода, фанатично кричат о соблюдении PSR.
Ну и избитая шутка на счёт «существуют 14 стандартов… нужно сделать один универсальный стандарт...» Тут тоже имеет место быть.
Я, как системный архитектор, большой международной компании, Вас бы на работу не взял)
AlexLeonov
31.07.2017 11:47Я не знаю, конечно, насколько вы хороший «учитель».
Дальше вы могли бы ничего не писать.salabon
31.07.2017 12:07Я не ставил своей целью, как то вас задеть.
Но по существу, как я вижу, аргументов у Вас нет.AlexLeonov
31.07.2017 12:12Аргументов? Чтобы приводить какие-то аргументы «за» или «против» некоей точки зрения, она (точка) должна существовать и быть озвучена.
В вашем комментарии я просто не вижу ничего, что требовало бы обсуждения. Просто некий текст, набор слов и предложений. Я прочёл этот текст, спасибо вам большое.
Повода для дискуссии не вижу.
SerafimArts
31.07.2017 21:11На счёт стандартов — это не больше, чем рекомендации.
В любом случае, в 2017ом году игнорирование этих рекомендаций говорит о том, что автор — совсем зелёный новичок и даже если это не так, я почти уверен, что большинство крайне скептически будут относиться к коду-отсебятине.
Всё же "рекомендации" они де-юре, а де-факто, нынче — "стандарт".
salabon
01.08.2017 10:56Вы меня видимо не понимаете)
Рекомендации — это именно рекомендации, а не догма.
Это не «стандарт» или что-то ещё.
В любом году.
Это как говорить, что художник, который пишет картину, должен делать мазки только слева направо, не длиннее 2-х сантиметров. Ибо в 2017 году это «стандарт».AlexLeonov
01.08.2017 11:10Мне кажется, что это вы немного не понимаете.
Впрочем, буду рад ошибаться.
Смотрите.
Первое: собираются разработчики популярных фреймворков, библиотек и самого PHP и признают, что околоязыка — полный бардак.
Спорить с этим бессмысленно — действительно, до php-fig бардак был такого количества и качества, что фактически мешал развитию и языка и экосистемы.
Кстати, надо отметить, что никто не мешает любому из нас войти в php-fig в любой момент. Это открытая организация (если ее можно вообще назвать таковой).
Второе: члены php-fig договариваются, что будут стараться личными и коллективными усилиями уменьшать энтропию в околоPHP. Что они начинают делать? Вырабатывать стандарты: предлагать черновики, обосновывать, дорабатывать, голосовать, принимать и реализовывать принятое в своих фреймворках и библиотеках.
И наконец многолетняя работа приводит к результатам: в мире профессионального программирования на PHP уходят в прошлое споры типа «табы vs. пробелы», закрывается дискуссия на тему «как делать автозагрузку», начинают работать по единому интерфейсу все приличные логгеры (SOLID, мать её, Лисков!) и библиотеки кэширование и так далее и тому подобное.
Всем от этого становится хорошо и приятно. Стандарты приводят к возможности пользоваться тем же composer, к появлению немонолитных фреймворков и множества полезных библиотек.
Вопрос лично вам: что вы видите плохого в этом процессе? Почему вы так резко против действительно общепринятых уже действительно стандартов?
P.S. Аргумент о том, что R — это Recommedations, слишком дешёвый. RFC — это тоже всего лишь Request, однако этот факт никого не заботит.salabon
01.08.2017 12:02+1Я не против самой по себе стандартизации.
Это правильно и полезно.
Я против фанатичного навязывания «общепринятых» «стандартов» всем подряд.
С одной стороны программирование (а не кодинг) — это творчество. И если вы растите разработчиков — не нужно их ограничивать или стандартизировать.
А вот если вы растите «винтики» — тогда все правильно. Им не нужно понимание работы в целом. Главное, что бы при смене, новый винтик не нужно было переобучать.
С другой стороны, любой язык программирования — это инструмент, в первую очередь.
И скальпелем можно резать торт. Удобно ли это и целесообразно, вопрос второй.
Вопрос в том, что это делать можно.
А вы утверждаете, что по «общепринятым стандартам» скальпелем можно резать только человеков и только специально обученным для этого людям.
Это как говорить, что велосипеды должны быть только с одинакового размера колесами. Одинаковой шириной покрышек. Это «общепринятый стандарт». Все остальное «околовелосипедное»… что производители велосипедов собрались, и договорились о стандартах.
Да, это добавило универсальности, несомненно. Это хорошо для продукта, но не для инструмента.
И вы, как разработчик, вполне можете создать свой велосипед, который будет не хуже, а возможно и лучше серийных решений.
Программирование — это в первую очередь творчество. Если ты разработчик конечно)
Я не увидел в ваших аргументах, почему именно в этой статье, где код просто для наглядности, необходимо строгое соблюдение «общепринятых стандартов».
Потому, что вам сложно его читать?)
Так может проблема не в коде?)
P.S. Эйнштейн, по моему говорил, что только глупцам нужен порядок…
AlexLeonov
01.08.2017 12:12Мне нравится ваш ответ. По крайней мере в нём убавился градус фанатизма и нетерпимости, и это хорошо.
Я не согласен с вами только в одном моменте. Правда, этот момент принципиален настолько, что приводит к полной невозможности согласиться со всеми вашими выводами.
Программирование — не творчество.
И не будет им никогда для 95% программистов.
Это банальное ремесло, которое нужно освоить, чтобы зарабатывать себе на жизнь. Причём по моему глубокому убеждению и профессиональному мнению, изучать программирование нужно в специализированных ПТУ, а не в вузах.
Вы можете себе представить сварщика или токаря, который после ПТУ приходит на производство и говорит «да вертел я вокруг своей оси все ваши ГОСТы и типоразмеры, я творец, я так вижу, я буду точить дюймовую резьбу, если на чертеже указана метрическая!»
Как долго он продержится на заводе?
Токарь или фрезеровщик получают право на творчество лишь после долгих лет у станка, проведенных за вытачиванием стандартных изделий. Изо дня в день. 8 часов, 5 дней в неделю.
С чего вы взяли, что у программистов по-другому?
Строгое соблюдение стандартов необходимо начинающим, чтобы в последствии не было горького разочарования в профессии. Чтобы не было обид на тему «я — творец, а меня не так поняли». Да так тебя поняли, так. Ты не творец, парень, ты просто кое-какер…salabon
01.08.2017 12:31Мы говорим о разных вещах.
Я говорю о том, что нужно выращивать, специалистов, которые могут создавать что-то новое. Для этого не нужно никаких ограничений.
Вы говорите о том, что нужно создавать винтики (кодеров).
Ну и конечно 95% из них не будут разработчиками. Кто-то просто на это не способен.
А у кого-то вы убили стандартизацией индивидуальность.
Музыканты то же бывают разные. Для кого-то это ремесло, и больше чем играть в ресторанах и на свадьбах, они не могут.
Я же говорю о том что, нужно помогать творцам развиваться.
На вашем примере с токарем… он делает продукт.
И делает его по заранее заданным техническим параметрам.
Но это не значит, что все токари должны делать все детали по «общепринятым стандартам». Вам нужно всего лишь объяснить им для чего эти стандарты нужны и какие они бывают.
И снова таки. Токарь следует чертежу, который для него разработал инженер.
И этот инженер не обязан фанатично следовать стандартам.
Важно, что бы его деталь «работала»
Это все, если мы говорим про продукт, который токарь делает на заводе.
Когда же токарь делает что-то для себя ( как в этой статье ), не важно как и где он это будет использовать…
Он волен следовать чему угодно. Только ему решать. И тут абсолютно не важно насколько много у него опыта. И так же, не следование «стандартам» не делает его деталь хуже.RomanPogosyan
01.08.2017 12:42Жаль карма не позволяет поставить +. Наконец то появился один комментатор который смотрит на мир не только со стороны стандартов, а так же со стороны идей.
п.с. Готов получить еще порцию минусов за комментарий.
AlexLeonov
01.08.2017 12:58+1А у кого-то вы убили стандартизацией индивидуальность.
Вы всё же не удержались, чтобы не сказать какую-то пакость… Ничем не обоснованную пакость с переходом на личности. Жаль.
Но это не значит, что все токари должны делать все детали по «общепринятым стандартам».
Услышьте меня. Чтобы начать что-то делать не по стандарту, чтобы предлагать изменения в стандарты или их отмену — сначала нужно научиться делать по стандарту и делать хорошо.
Именно этим и отличается творческий подход от кое-какерства, которые вы пропагандируете.
Делай хорошо — и хорошо будет. Хреново получилось — не стандарты виноваты, а ты хреново делаешь!salabon
01.08.2017 13:13А у кого-то вы убили стандартизацией индивидуальность.
Это из личного опыта. Я наблюдал это много раз. Стандартизацией убивается индивидуальность.
Я не ставлю своей целью как-то вас задеть.
Я говорю вам, что вы учите людей клеить обои. Мотивируя это тем, что это ремесло, надо зарабатывать на жизнь, и все равно 95% из них больше ничего не светит.
Учите, что в 2017 году есть стандарты и обои нужно клеить только вертикально, только с перехлестом в 5 мм. и если обои отклеились, что виноваты не стандарты, а просто хреново приклеили.
Я говорю вам, как человек, разработавший не один дом, от идеи до конечного проекта, решавший не раз все инженерные тонкости и дома которого стоят уже не один год… что обои можно клеить и горизонтально. И даже под углом в 45 градусов к полу.
А можно и вообще без обоев)
AlexLeonov
01.08.2017 13:47Это из личного опыта. Я наблюдал это много раз. Стандартизацией убивается индивидуальность.
Так и пишите тогда. И не надо извиняться и говорить, что не хотели задеть — задели. И хотели.
Я говорю вам, что вы учите людей клеить обои. Мотивируя это тем, что это ремесло, надо зарабатывать на жизнь, и все равно 95% из них больше ничего не светит.
Учите, что в 2017 году есть стандарты и обои нужно клеить только вертикально, только с перехлестом в 5 мм. и если обои отклеились, что виноваты не стандарты, а просто хреново приклеили.
Совершенно верно.
И пока студент не поклеит тысячу квадратных метров обоев я его близко даже к «творчеству» не допущу. Иначе результат «творчества» будет жалок. Что мы и наблюдаем в обсуждаемой статье.RomanPogosyan
01.08.2017 14:16Не соглашусь с вашим подходом. Если тот кто желает творить сотворит что то, хоть даже и криво, всегда найдутся люди которые поправят и «вылижут» недостатки. А те которым запрещали творить и убивали это желания изначально не факт что захочет этим заниматься после. Банально пять же упершись в стандарты которые постоянно меняются со стечением времени у него банально может не хватить на это времени.
Банальный пример:
Допустим человек не изобрел велосипед и до сих пор для него средство передвижения это конь.
А какой то умник взял и придумал велосипед с квадратными колесами.
Тут вариантов 2.
1) Все его засмеют и скажут, что передвигаться на нем крайне тяжело хоть он и передвигается, и передвигается как конь (скачками), и вообще нафиг нам велосипед ведь конь же передвигается. Лучше займитесь селекцией и выведите породу которая быстрее скачет и плавнее.
2)Более компетентные в физике люди скажут: Блин а задумка интересная. просто можно бы колеса ему сделать круглыми. Тогда и ехать легче и сена не просит.
В обоих случаях будет прогресс. В первом будут лучше кони, во втором будут лучше и коне и велосипеды.
Тут нет неправильного варианта, просто второй немного лучше так как прогресс будет быстрее.salabon
01.08.2017 14:30Я просто оставлю это здесь))oxidmod
01.08.2017 15:16+1А потом такие творцы натворят ад и уйдут творить дальше в другой компании, а убитые стандартизацией индивидуальности будут все это добро поддерживать и рефакторить, пытаясь понять что имел ввиду творец. Знаем, проходили…
Хочешь творить — пожалуйста. Заведи себе приватный репо и твори.
Хочешь делиться с сообществом — приведи код к общепринятому виду.salabon
01.08.2017 15:45-1Творцы разные попадаются)
Но если вы не можете прочитать/понять работающий код, то проблема не в коде)oxidmod
01.08.2017 16:17+1Я могу прочесть работающий код.
Но вот странно выходит как-то. Есть вот творцы, типа этого или вот этого… Ну или автор статьи.
Но вот тратить свое время чтобы читать их творения почему то желания нет. Возможно как великих творцов своего времени их не понимают и спустя века наши потомки будут восторгаться их полетом мысли, ну а мы неотесанные современники почему то предпочитаем тратить свое время на полезную деятельностьcoresky
02.08.2017 20:32У меня сложилось впечатление, что ты просто платный троль. Тебе платят, за то чтобы тролить все невписывающееся в современный тренд. Да если не хочешь читать творения, да просто не читай, тебя кто заставляет? Хочешь сказать ты отважный боец за тренд? да не верю. Троллингом у него есть время заниматься, а читать новое нет.
ну а мы неотесанные современники
хорошо что хоть такое допущение принимаешь.coresky
02.08.2017 21:32Хабр и платит, чтобы шухер наводить. Острая дискуссия вызывает интерес, больше прочтений и просмотров. Капля по капле, денег больше. И на оплату тролля хватает. Главное даже не деньги, а популярность сайта. Ну и много платят? Ладно. не интересно мне… просто так спросил. И это понятно, я бы тоже платил, честно признаюсь, какому нибудь acid-option. Как гврится, не хочется, но надо, Федя… Жаль только, что усилий приходится нам прилагать намного больше, чем могло бы понадобиться… Ты что, автор статьи, забыл что внешний мир суров и беспощаден? Сюда нужно все приносить на блюдечке. Готовый фокус-мокус, понятный невооруженным глазом. Каплей меньше и провал. Только если бы был готовый фокус, были бы мы на хабре? Вот и остается троллинг, переводы и аккуратная вода. Старайся лучше, автор)
ellrion
02.08.2017 23:13О! да тут помимо мании величия (которая была видна в комментах под прошлыми статьями) еще и вера в заговоры. Шикарно!)
RomanPogosyan
01.08.2017 16:21Интересно что будут такие «убитые стандартизацией индивидуальности» делать если творец не натворит? даже если ад. Ведь почему придумывают стандарты? потому что творцы натворили аду и это все надо привести к «божеский вид». А если не натворят аду? То писать свой стандартный код «убитым стандартизацией индивидуальностям» на песочке, на пляже, палочкой, для рыбы. Кстати откуда взялся PSR? Оттуда, что появилось много фреймворков, придуманных разными творцами. По вашему все они были написаны криво и только один был правильным. И он стал рекомендацией? Или разработчики ipv6 были криворукие и запустили протокол намного раньше, чем появился RFC для него? И не факт что «убитые стандартизацией индивидуальности» не накосячат в том же аду который, как ни странно, работал. Тоже знаем, тоже плавали.
Никто не запрещает же не использовать то, что не нравится. А если нет другого выхода, то надо радоваться тому, что есть выход хоть и кривой. Иначе его вообще бы не было. И надо искать творца, который не факт, что сотворит по стандарту :)
И еще один минус в том, что стандарты отбивают у «убитых стандартизацией индивидуальностей» желание мыслить. Так как человек — это существо ленивое. Ему дали что-то стандартное, а он и рад. Ведь думать не придется. И тут появится «творец» который «сотворит» что-то с уязвимостью в стандарте и все стандартно летят, так как стандартно делали копи паст и не вникали что, где и как.
Когда вы проходили по «аду» того творца, уверен, что вы сообщали начальству о том что там «ад», и вам 100 пудов предложили «охладить ад». И как поступили вы? Сотворили рай? Судя по тому что вы написалиубитые стандартизацией индивидуальности будут все это добро поддерживать и рефакторить, пытаясь понять что имел ввиду творец
, оказалось кишка тонка. И пришлось вам бедным все это добро поддерживать и рефакторить.
Как то так.oxidmod
01.08.2017 17:35+1Свои догадки держите при себе.
зы. Странно, что «А потом такие творцы натворят ад и уйдут творить дальше в другой компании» не вызывает у вас претензий. Тобишь это для вас нормально, наговнокодить и свалить?
ззы. Вовсе не обязательно повторять всю историю развития человечества, чтобы воспользоваться современным гаджетом. Точно также не обязательно наступать на теже костыли что и авторы десятков забытых либ и фреймворков, которые творили забив на принятые стандарты.
ellrion
02.08.2017 23:15"Убитые стандартизацией индивидуальности", "творец". Не много на себя берете?
RomanPogosyan
03.08.2017 00:27Еще один «тут читаю тут не читаю» решил изъявить свое мнение. Перед тем как взвешивать кто и сколько на себя берет, потрудитесь прочитать всю ветку дискуссии пожалуйста. Будьте так добры.
ellrion
03.08.2017 00:52а я прочитал
RomanPogosyan
03.08.2017 01:43тогда могли бы догадаться что «творцы» и «Убитые стандартизацией индивидуальности» цитированы из поста оппонента. И думаю не вам решать, кто тут и чего на себя берет. Так как к вашей личности эти посты не имели ни какого отношения.
salabon
01.08.2017 14:26Вы снова услышали только то, что хотели)
И я не извинялся. Ибо изначально не ставил своей целью вас задеть)
Я говорю абстрактно, про «таких педагогов» в целом.
Считаете и себя таким — ваше дело)
Результат творчества, в данной статье, не плохой, рабочий и имеет место для применения. Что уже было отмечено не только мной.
То, что за отсутствием следования каким-то стандартам кода, вы не увидели самого алгоритма — грустно и само по себе говорит о многом, в очередной раз подтверждая выражение «кто умеет — делает, кто не умеет — учит».
И пока студент не поклеит тысячу квадратных метров обоев я его близко даже к «творчеству» не допущу. Иначе результат «творчества» будет жалок. Что мы и наблюдаем в обсуждаемой статье.
Ну а это как бы совсем «зашквар» )
P.S. Я так и не услышал, от вас, ни единого аргумента, почему код именно в этой статье должен следовать каким-либо «общепринятым стандартам».AlexLeonov
01.08.2017 15:06После этого комментария я окончательно потерял нить разговора и перестал понимать, что вы хотите.
RomanPogosyan
01.08.2017 15:19Думаю вам пытались втолковать, что не надо заклевывать идею и человека подавшего вариант ее реализации, пусть даже не идеальный. Вместо оценивания велосипеда, оценивая фигуру его колес.
salabon
01.08.2017 15:49Да) если кратко)
Ну и попутно, я пытался объяснить Учителю, что судя по его словам, он возможно что-то делает не так.
salabon
01.08.2017 15:47Я хочу услышать от вас аргументы )
Почему код именно в этой статье должен следовать каким-либо «общепринятым стандартам»?
На счёт «общепринятости», читаемости и стандартности я уже объяснил)
zelenin
01.08.2017 17:02примерно по той же причине, что описана в этой статье https://habrahabr.ru/post/183374/
чтобы код был принят сообществом, желательно — в данном случае обязательно, т.к. код не уникален, и может быть отторгнут сообществом — соответствовать общепринятым стандартом. Когда 95% окружающего тебя кода (все топовые библиотеки гитхаба, принятый в компании кодстайл итд) соответствует psr, то несоответствующий код вызывает отторжение.
AlexLeonov
01.08.2017 17:03Ваш вопрос изоморфен вопросу «почему люди не должны убивать других людей»?
Потому что так общепринято и стандартно.RomanPogosyan
01.08.2017 17:22Хотя существуют племена каннибалы и по их мнению они должны убить и съесть. И странно почему их не истребили? Тем кому эти племена не интересны, просто к ним не лезут.
AlexLeonov
01.08.2017 17:30+1Ну так и вы не лезьте на хабр, пока не научитесь писать код так, как его пишут в цивилизованном мире.
А то сожрут ведь :)
SerafimArts
03.08.2017 01:41В этой "хабравложенности" я вообще потерялся кто кому отвечал. Тяжело воспринимать. Так что оставлю и свой коммент в ветке про "стандартизации".
Существует мнение, что "творить" надо кодом, а не средствами его форматирования. И кажется это вполне укладывается в принцип "используйте PSR-1, PSR-2 и PSR-12".
А ещё стоит помнить один нюанс — используя язык X, как бы не нравилось, используй общепринятые в этом языке подходы, иначе не публикуй и не показывай никому код. Пока такой подход мне не мешал "творить", чего и вам желаю.
morikvendy
01.08.2017 23:07Результат творчества, в данной статье, не плохой, рабочий и имеет место для применения. Что уже было отмечено не только мной.
Проблема еще и в том, что «результат творчества» не несет никакой новизны, как я уже отметил ниже, по этому смотрят на реализацию, которая в изначальном варианте статьи была совсем ужасная, сейчас стало немного лучше. Ну и выкладывая код, содержащий грубейшие ошибки (sql injection в первой версии когда в статье), следует быть готовым к тому, что к нему прицепятся.salabon
02.08.2017 10:39На счёт не новизны спорно.
Я, к примеру, пока не встречал таких реализаций.
На счёт «грубейших ошибок» уже говорили… код для наглядности.morikvendy
02.08.2017 13:50Про новизну, я уже писал в комментарии ниже: есть статья 2011-ого года и статья 2012-ого года, которые предлагают подобные решения. да во второй статье код тоже фиговый и с sql-injection, но суть статьи примерно таже…
morikvendy
01.08.2017 22:47И снова таки. Токарь следует чертежу, который для него разработал инженер.
И этот инженер не обязан фанатично следовать стандартам.
Да, инженер может в процессе работы делать что угодно и как угодно, но когда он завершит творческую часть своей работы, то ему нужно будет конечный результат этой работы — чертеж — оформить в соответствии со стандартами, по ГОСТу. В противном случае его либо развернет контролер, либо, если контролера нет или он проглядел ошибки оформления, может случится авария из-за того, что токарь неправильно поймет и сделает деталь не так, как рассчитывал инженер.
На мой взгляд со стандартами (рекомендациями) по написанию кода все тоже самое, у себя вы можете делать как угодно — следовать «общепринятым» стандартам, придумать свои или вообще писать как попало, но когда выкладываете код туда, где его будут видеть и читать другие люди, то следует привести его к стандартам того места, куда его выкладываете. Ведь наверняка у вас на работе, если вы не в одиночку ведете проект, есть какой-то code-style. Ну а в общих репозиториях PHP это, обычно psr. И я, честно говоря, не вижу в этом беды, если вам не нравятся эти стандарты, то современные IDE (Intellij Idea и основанные на ней точно, подозреваю что и большая часть других) позволяют настроить автоматическое преобразование кода к тому виду, который вам удобен, сразу после pull и обратное преобразование перед push.
zelenin
01.08.2017 11:20Это как говорить, что художник, который пишет картину, должен делать мазки только слева направо, не длиннее 2-х сантиметров. Ибо в 2017 году это «стандарт».
мазки — это творчество. требования к оформлению кода — это технические детали.
RomanPogosyan
30.07.2017 00:24-11Тут статью кто либо читает? Или только код? Действительно лучше бы не читал.
jonic
30.07.2017 02:51+8А зачем тогда в статье код? что бы его не читать?
RomanPogosyan
30.07.2017 19:21-2Ну вы тут написали чтобы написать. Вопрос подразумевал не «чтение кода» а «чтение ТОЛЬКО кода»
jonic
30.07.2017 20:48+1Просто представьте на секунду что Вы читаете документацию, с вкраплением how-to и она написана ужасно. Знаете почему я вдруг охладел к написанию статей на хабр? Всё кажется такой мелочью что даже не достойно обсуждения. Ну сделал ты что-то(это я к себе обращаюсь), вау, круто, хорошо. Но сообществу то что с того? Это не фреймворк, это не вещь и не предостережение и не исследование которое было интересно прочитать. Я же зашел в эту статью, потому что не поверите, но за недели две до статьи сам размышлял на тему «имеет ли смысл отправлять пароль сразу захэшированным». Да и у меня до сих пор есть микро-открытия. Только вот они микро. От этого я и не пишу.
morikvendy
31.07.2017 19:54В статье по большому счету нет ничего нового. первый же запрос в google дает ссылки на статью с описанием похожего механизма пятилетней давности и пост на хабре по той же тематике шестилетней давности. Поэтому смотреть имеет смысл только на реализацию, а она ужасна…
Ну и ценность данного метода в плане безопасности почти нулевая.
voidshah
30.07.2017 01:11мда… код — просто «ужасть»… по теме — есть вариант использования шифрования с открытым ключом. Так, например, делают некоторые платежные системы.
jonic
30.07.2017 02:33+1Я вот понять не могу, как блин (много слов не культурных) продается netcat в 2017 году и его еще хвалят и хотят на нём сайты? Ну как?! КАК?!
beat
30.07.2017 08:21+5совсем не странно что многие потом пишут PHP — говно, такое смотришь, кровь из глаз
chelaxe
30.07.2017 08:42+3Есть OpenPGP.js или crypto-js. В свое время на основе их и Node.js делал чат с шифрованием.
vkirkizh
30.07.2017 12:42Зачем изобретать велосипед, когда есть HTTP Digest Auth? https://ru.m.wikipedia.org/wiki/Дайджест-аутентификация
m0rtis
30.07.2017 12:42+4Я вот понять не могу — это диверсия такая?? Уже которая статья на Хабре (кроме дайджеста) с тэгом "php" — это лютый невообразимый кошмар.
Признайтесь, вы специально это делаете, чтобы дать возможность уверенно писать, что "php-программисты тупые уроды"???andreymal
30.07.2017 17:10Я предполагаю, что авторы подобных постов сами не совсем виноваты в своей «тупости», боюсь, что их так кто-то учит и что-то надо делать с такими учителями
AlexLeonov
30.07.2017 21:05Я вам, как действующий преподаватель, открою секрет, кто их учит.
Их учит youtube, rutracker и сервисы «складчин».
Dmitry_5
31.07.2017 14:26А подскажите дилетанту, почему такой функциональности не реализовано в браузерах с завода, чтобы шифровать введенный пароль на уровне компонента ввода? Слишком низкий прирост безопасности?
andreymal
31.07.2017 15:41Почему же, реализовано — HTTPS называется
Dmitry_5
31.07.2017 18:40Я про шифрование еще до передачи в канал, в памяти компонента textinput, так же как он умеет звездочками пароли закрывать, так пусть и шифрует сразу
RomanPogosyan
31.07.2017 19:49Так вопрос в том, что есть 100500 типов шифрования обратимых и необратимых. в них и заключается полет фантазий за которые меня так минусуют :)
andreymal
31.07.2017 20:02+1И это тоже есть (Digest), только никем не используется. Подозреваю, если покопаться, то все подобные методы окажутся в чём-то небезопасными.
Например, в алгоритме из данного поста знать пароль для авторизации вообще не нужно, достаточно знать md5 пароля. Который хранится как есть в базе и который можно оттуда прочитать любым select'ом (кстати, напомню, в первой версии поста была SQL-инъекция).
Если нужно получить именно чистый пароль, то подобрать его по md5 не составит труда, если он короткий (а у большинства пользователей пароли будут короткие).
У одних и тех же паролей будет один и тот же md5, так что, получив доступ к базе, мы сразу же сможем узнать, у каких пользователей стоят одни и те же пароли.
Короче, лучше просто прикрутить HTTPS и солить пароли в какие-нибудь bcrypt/scrypt/PBKDF2/Argon, так намного проще и безопаснее и надёжность проверена всеми кому не лень.
Zenitchik
31.07.2017 15:45почему такой функциональности не реализовано в браузерах с завода
Это Вы про HTTPS?
UPD:
Опередили. Но удалять не буду.
RomanPogosyan
31.07.2017 15:25-1Думаю потому что нет стандарта шифрования. они бывают разного уровня и сложности. С завода реализован HTTPS. За шифрование которого отвечают некоторые конторы за деньги или на страх и риск пользователя самописные сертификаты. Все остальное — полет фантазий.
SerafimArts
31.07.2017 20:59Знакомьтесь: https://letsencrypt.org/ Под "некоторыми конторами" в данном случае выступают мозилла, хром, циско, фейсбук и прочие, чуть менее именитые заведения. "Самоподписывают" за бесплатно.
Iqorek
Такая защита немного усложнит жизнь взломщикам, но против man-in-the-middle она абсолютно уязвима. SSL кроме шифрования, не дает «человеку в середине» подменить ответ сервера, тут же даже не надо ничего ломать, вам заинжектят скрипт, который повесится на ваш $("#pass").on(«input») и отошлет ваш пароль куда надо в самом наилучшем виде. Кроме SSL у вас в браузере нет никакой другой опции узнать, что то что ушло с сервера пришло к вам без изменений.
RomanPogosyan
Да в принципе ничего не мешает работать в VPN, туда вообще вломиться очень сложно. хотя никто не отменял кражу пароля трояном.