Pull to refresh
33
0.1
ionicman@ionicman

User

Send message
О давайте тут про ассемблер поговорим и про работу напрямую с памятью в браузере — это же так ускоряет разработку, когда все напрямую :-D
Я вот знаю intel, zilog, microchip и atmel нотации, а Вы? )))
Самое место.

Харош уже троллить, Все подробно и четко уже описали Вам, дальше уже не смешно.
Ибо string, number & boolean — это разные объекты — именно зайчики, ежики и гиппопотамы в Вашей терминологии. Вы работаете с их экземплярами.

Если бы это был язык со строгой типизацией, то операции типа string == boolean в принципе не возможны — сразу же будет ошибка.

Но если такое сделать в языке, построенном на слабой типизации — то это будет ад.

По этому каждый объект имеет методы приведения к определенному типу (или одному универсальному типу) и есть неявное приведение этих типов, чтобы можно было писать string == false, и в мануале описано как че когда себя ведет и во что преобразуется.

Вы ругаетесь на JS, потому что пытаетесь к нему относится с точки зрения строго типизированных языков, точно так-же его ругают те, кто не понимает прототипы, говоря что ООП у языка нет (ну или оно неправильное) и это пи#$ец!

Нельзя ругать отвертку за то, что Вы ей паять пытаетесь, хотя да — она вполне похожа на паяльник.

Разберитесь, что такое JS — и тогда все встанет на свои места.

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

Если Вам он не удобен, не привычен и не интуитивен — возьмите другой, не мучайтесь.
Благо альтернативы есть, пусть и с трансляцией.
Я там выше написал вам что JS — это «язык со слабой типизацией», не поленитесь — посмотрите что это — и Вам станет очевидно такое поведение.

У языка есть неявное преобразование типов, которое обязано его слабой типизации, именно по этому там есть «строгое» (с точностью до типа) и «не строгое» (с автоприведением типов) сравнение.

Аналогия с девочкой неуместна — если ты настоящий мужик, она всегда скажет тебе «ДА».
Будьте настоящим программистом :-D
Я Вам специально там ниже ответил, для тех, кто любит видеть в лесу только елки :)
Я могу в if использовать и арктангенс, и это тоже будет вполне валидно :)
Но уж если вы пользуетесь сокращенными вариантами типа "!" то будьте любезны знать как оно работает.
== это оператор сравнения без учета типа объекта
! это оператор отрицания

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

И это никакой не дурдом, а вполне нормальное поведение, описанное в стандарте.
:-D по-моему как малолетний ведете себя Вы, ну как минимум в последнем то сообщении точно.

Ну да зато я хоть поржал, люблю неадекватов :-)

И заметь, пиво мы с Вами не пили, так что тыкай друзьям своим. Вежливость никто не отменял.
ОО, Вы реально доставляете :-D

Что ж там такого неидеального с т.з. веб-разработки? :)

А я не говорил ничего про линь и веб-разработку :-D

У меня такое впечатление складывается, что Вы или не читаете или не понимаете что я пишу, или то и другое вместе :-D

Ну или Вы тролль :-D

Линукс в качестве десктопа пока все еще на айс — увы.

Вот мои слова, тут нет ни слова о веб-разработке. «в качестве декстопа» по моему вполне понятно что говорится о GUI, не?

Точно! То что такого пакета нет под виндой виноват программер!

Не, реально, остыпьте мне того, чего употребляете :-D Этож как надо было исказить то, что я писал ))))

Ну что делать, разжую «Если программист использовал костыль вместо проверенного и уже существующего решения из-за того, что данное решение не работает на его системе».

Ну это примерно как если-б Вы сидели под линуксом и не смогли пакет PCRE собрать и установить (хотя абсолютно понятно что именно он Вам нужен) — ну не получилось, забили и написали свою машину регулярных выражений :-D

За велосипеды я бью очень больно и это правильно.

Потому что если что-то у вин-пхпхера не идет на машине, ему доступна настроенная опытным линуксоидам песочница под дебианом с доступом прямо из JB PHPStorm-а по SSL. Как раз для таких случаев.

Но мы то не про это совсем разговаривали )
Надеюсь, донес. Мне страшно за тех людей, которые дают Вам работу — если Вы ТЗ также витеевато интерпретируете — это пи#$ц, простите :-D
Для меня это не новость.

Некоторые инструменты — да, некоторые модули — да.
Основные — отлично работают.
nginx под виндой в качестве продакта не айс, в качестве энвиромента — вполне гуд.

Это все вовсе не означает, что веб-программер, работающий на линуксе гораздо лучше работающего на винде, как и наоборот.
Я вот это все пытаюсь донести, но видимо не судьба )))

Юзать можно все, что угодно. Дело привычек и все такое. Многим не нравятся некоторые особенности — даже в этой теме народ отписывался.

Еще раз повторю — как десктоп Линь все еще далеко не идеален.
Юзать можно, да.

Я могу программить вообще в консоли, юзая лишь nano/ed/vim/mc и вполне буду себя комфортно при этом ощущать :-D

Но это ни говорит ни о моей продвинусти, ни о моем качестве кода.

Еще раз — Линух и Винда никак не сказывается на качестве решаемой задачи веб-программером, как и на его продвинутости.
Если человек долбо#$ — то он будет им вне зависимости на чем сидит :-D
Как и наоборот.

Вот если программер упрется в то, что под виндой не ставится какой-то пакет и вместо этого он напишет костыль — то тогда да, пипец.
Но, опять-же, тут дело в человеке и в ничем более.
Эк Вы неугомонный :)

Линукс в качестве десктопа пока все еще на айс — увы.
OpenNet Вам в помошь — там много по этому поводу воды расписано.
IOS да.

Если проекты на уровне сайта-визитки то да, конечно выбор ОСи — второстепенно.

ОСи разработки имелось ввиду, а не где крутиться будет :-)
От ОСи разработки не зависит продукт точно.

Совершенные инструменты тоже не завязаны на ОСь — они завязаны на человека, который их юзает как и технологии.
А то по-вашему если человек на винде сидит, то ему и новые технологии никакие в программировании не доступны ))) Насмешили.

А по поводу убеждения — зачастую старые дядьки более опытны — не рассматривали такой вариант? :-D

Вот если человек факты и аргументы — это да, пипец.

А насчет чуши — ну например в этой статье я чуши не вижу никакой.

Я еще раз попробую донести до Вас то, что Вы так упорно игнорируете — от выбора системы навыки программиста как и его код не зависят (во всяком случае в данном контексте).
Продавать себя на фриласне и заниматься продажами продукта уровня энтерпрайз или чуть ниже — две ааабсолютно большие разницы — поговорите с знакомыми продакт-менеджерами — они Вам расскажут :-D

Большинство этих программеров могут поднять и настроить Апач и мускл под дебианом — это осилили? :)

Но работать им привычней под виндой — свои утилиты и инструменты, к которым они прикипели, и которые заточили как им удобно, да ипросто привычная парадигма системы. Я не навязываю им выбор среды разработки.

Этих, как Вы называете «чудаков» весьма немало. И я среди них встречал очень и очень нехилых профи. Качество кода не зависит от операционной системы — поверьте :)
На продакте действительно стоит линь, но например я не встречался с какими-либо проблемами работы кода что под PHP / Python, за исключением того что под линь оно быстрее и дольше робит ну и незначительные различия :)

И еще одно — умейте уважать чужое мнение, и людей, его имеющих.
Здесь все — грамотные и уважаемые технари.
Потому что то, как Вы пишите и что Вы пишите делает Вас похожим на типичную школоту.

И опять-же возвращаясь к чудакам — у меня в ведении несколько серваков под Debian / FBSD. Настраивал их я.
На работе у меня две системы — Kubunta и W7.
Дома W7, на серваки захожу из под нее же.
И за плечами у меня как минимум 3 энтерпрайс проекта и веб программинг с 1990 года — это я не хвастаюсь — просто констатирую факты.
И, не поверите, я предпочитаю win для написания кода!
Потому что я старый динозавр, привык бля к винде :-D

Однако по Вашему я чудак, ни на что не спосбный :-D

Будьте терпимей к другим — это убережет Вас от кучи ошибок и сохранит Вам зубы и морду в трогательной девственной красоте ;)
Че-то я Вас не понимаю, То Вы пишите, что продажами занимаетесь, то — что разработчик.

Вы вообще смотрели статью то? И Что в сборке?

Там нет никакой солянки, там набор стандартных пакетов типа Apache / MySQL / Python под вонь и несколько cmd-шников, которые патчат их инишки и ВСЕ.

По поводу адекватных разработчиков не загоняйтесь —
у меня в конторе из 13 веб-программеров 10 сидят под виндой, и мне например эта сборка очень приглянулась — ибо работает с пол пинка.

А автора Вы пытались учить продажам кстати и отношению к клиентам (причем еще и абсолютно неправильным вещам) — от по этому он Вас про продажи спрашивал :-D
Ну рискну предположить, что там нет Python-а. Совсем :-D
На самом деле, а почему не PBKDF2?
Вроде бы как сейчас самый верный вариант, из того что смог посмотреть.

В PHP есть имплементация простая:
код
/*
 * Password hashing with PBKDF2.
 * Author: havoc AT defuse.ca
 * www: https://defuse.ca/php-pbkdf2.htm
 */

// These constants may be changed without breaking existing hashes.
define("PBKDF2_HASH_ALGORITHM", "sha256");
define("PBKDF2_ITERATIONS", 1000);
define("PBKDF2_SALT_BYTES", 24);
define("PBKDF2_HASH_BYTES", 24);

define("HASH_SECTIONS", 4);
define("HASH_ALGORITHM_INDEX", 0);
define("HASH_ITERATION_INDEX", 1);
define("HASH_SALT_INDEX", 2);
define("HASH_PBKDF2_INDEX", 3);

function create_hash($password)
{
    // format: algorithm:iterations:salt:hash
    $salt = base64_encode(mcrypt_create_iv(PBKDF2_SALT_BYTES, MCRYPT_DEV_URANDOM));
    return PBKDF2_HASH_ALGORITHM . ":" . PBKDF2_ITERATIONS . ":" .  $salt . ":" . 
        base64_encode(pbkdf2(
            PBKDF2_HASH_ALGORITHM,
            $password,
            $salt,
            PBKDF2_ITERATIONS,
            PBKDF2_HASH_BYTES,
            true
        ));
}

function validate_password($password, $good_hash)
{
    $params = explode(":", $good_hash);
    if(count($params) < HASH_SECTIONS)
       return false; 
    $pbkdf2 = base64_decode($params[HASH_PBKDF2_INDEX]);
    return slow_equals(
        $pbkdf2,
        pbkdf2(
            $params[HASH_ALGORITHM_INDEX],
            $password,
            $params[HASH_SALT_INDEX],
            (int)$params[HASH_ITERATION_INDEX],
            strlen($pbkdf2),
            true
        )
    );
}

// Compares two strings $a and $b in length-constant time.
function slow_equals($a, $b)
{
    $diff = strlen($a) ^ strlen($b);
    for($i = 0; $i < strlen($a) && $i < strlen($b); $i++)
    {
        $diff |= ord($a[$i]) ^ ord($b[$i]);
    }
    return $diff === 0; 
}

/*
 * PBKDF2 key derivation function as defined by RSA's PKCS #5: https://www.ietf.org/rfc/rfc2898.txt
 * $algorithm - The hash algorithm to use. Recommended: SHA256
 * $password - The password.
 * $salt - A salt that is unique to the password.
 * $count - Iteration count. Higher is better, but slower. Recommended: At least 1000.
 * $key_length - The length of the derived key in bytes.
 * $raw_output - If true, the key is returned in raw binary format. Hex encoded otherwise.
 * Returns: A $key_length-byte key derived from the password and salt.
 *
 * Test vectors can be found here: https://www.ietf.org/rfc/rfc6070.txt
 *
 * This implementation of PBKDF2 was originally created by https://defuse.ca
 * With improvements by http://www.variations-of-shadow.com
 */
function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false)
{
    $algorithm = strtolower($algorithm);
    if(!in_array($algorithm, hash_algos(), true))
        die('PBKDF2 ERROR: Invalid hash algorithm.');
    if($count <= 0 || $key_length <= 0)
        die('PBKDF2 ERROR: Invalid parameters.');

    $hash_length = strlen(hash($algorithm, "", true));
    $block_count = ceil($key_length / $hash_length);

    $output = "";
    for($i = 1; $i <= $block_count; $i++) {
        // $i encoded as 4 bytes, big endian.
        $last = $salt . pack("N", $i);
        // first iteration
        $last = $xorsum = hash_hmac($algorithm, $last, $password, true);
        // perform the other $count - 1 iterations
        for ($j = 1; $j < $count; $j++) {
            $xorsum ^= ($last = hash_hmac($algorithm, $last, $password, true));
        }
        $output .= $xorsum;
    }

    if($raw_output)
        return substr($output, 0, $key_length);
    else
        return bin2hex(substr($output, 0, $key_length));
}

Я не представляю, как путем реверс-инжениринга можно это высчитать, ну вот честно. Если что-то простое, то да. Но у нас алгоритмов криптографии даже не 5 или 10, а гораздо больше, причем у каждого из них есть еще внутри куча вариаций и подтипов, плюс надо перебирать поля из базы, чтобы понять комбинация из каких полей составляет случайную соль.

Реально ли это можно подобрать? Ибо, если честно, не особо верится.
Т.е. получается что мы бьемся за интервал времени разгадывания паролей — так или иначе, рано или поздно, злоумышленник получит их, но мы дадим больше времени, чтобы пользователь мог успеть сменить свой пароль?
По сути тогда надо использовать максимально медленный алгоритм, и при этом чтобы медленность его росла с увеличением числа знаков.

Какой из существующих алгоритмов для этого лучше?
по п.1 — теоритически «случайную соль» можно высчитать, как узнать что она является вектором например в AESе или еще где-то? или еще чем-то, и не она сама, а md5( нее + что-то )?
Т.е. как узнать что используется за алгоритм вычисления хэша по хэшу?
А можно дурацкий вопрос?
При переборе человек будет предполагать по виду ключа, какой алгоритм использован, так?
т.е. bcrypt / md5 — это стандартные алгоритмы для генерации хэша, и т.е. на них первых и падет подозрение (ну и на другие стандартные).

1) если у взломщика есть только БД, но нет кода, лучше использовать любой нестандартный алгоритм, ну не знаю, md5( Rijndael( пароль + md5( времени регистрации на ресурсе ) + статическая соль, статический вектор, зашитый в код ) ) — мне кажется так просто «в лоб» подобрать такие комбинации весьма проблематично.

2) если у взломщика есть доступ до файлов / движка, защититься в принципе невозможно, и будет скомпромитированы все пользователи с простыми, словарными паролями, вычислить же чистым пароль, которого нет в словарях при таком алгоритме практически невозможно.

3) если операций авторизации у вас на ресурсе не огромное количество, то в качестве соли, для некомплементарных алгоритмов можно выбрать соль килобайт на 200, так что на быстродействии авторизации это практически не скажется, а вот подбор затруднит существенно.

4) ну и естественно попытки брута надо определять и дополнять счастье капчей + ограничением попыток в единицу времени.

Нет?
Фигассе «просто» :-)
Это в случае Stateless просто, а здесь, пи#$$ц, извините.

Это надо писать балансер, который бы раскидывал нагрузку, ну или использовать готовый — по мне так это нифига не просто + куча подводных граблей.
PHP будет и дальше развиваться в сторону различного «сахара», думаю, что так-же обязательно будет точиться ООП в нем.

Возможно — и это очень бы хотелось — добавят strict режим, о котором уже просили разработчиков (чтобы не было проблем аля if ( «0x00» == 0 ) {} ) и т.д.

Но в любом случае, мне кажется, что язык будет идти в сторону большей строгости (типизация и т.д.)

Ну и судя по тенденциям, думаю, будут развиваться асинхронные возможности.

Information

Rating
3,258-th
Registered
Activity