Pull to refresh
20
0
Роман @Power

Программист

Send message
Counterbug: не знаю, как перевести коротко, поэтому будет длинно.
Когда кто-то приходит к вам и показывает вам ваш баг, вы в ответ показываете ему его баг. Этот последний и есть counterbug.
А почему бы не сделать просто
-A INPUT -m conntrack --ctstate NEW -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP (или -j logdrop, если нравится)?
Как насчёт xentrace /dev/stdout | cat
В этом случае /dev/stdout уже будет не на терминал указывать, а на безымянный пайп.
Уж фиг с ними с отступами, с потерянными ноликами, с тем, что у вас метод называется как конструктор (и не понятно, это должен быть всё-таки метод или конструктор). Можно даже закрыть глаза на то, что у вас не проверяются возвращаемые значения (Boolean Success). Но скажите, какое оправдание есть тому, чтобы писать
private static final byte[] Hexhars = ... ;
result.append((char) Hexhars[...]);
вместо
private static final char[] Hexhars = ... ;
result.append(Hexhars[...]);
Вряд ли. Посмотрите, какой именно процесс грузит.
А если пользователь в рамках сессии откроет больше одной вкладки?
Будем оперировать тем порядком аргументов, который идёт в PHP. Обозначим hash_hmac('sha1', a, b) как s(a, b) для краткости. Ещё: L — login, P — password, KR = random_key+remote_addr.

На сервере в файле лежат:
s(P, L)
s(s(L, P), L)

С клиента на сервер передаются:
s(KR, s(P, L))
s(L, P)

Зная первый хеш, можно в любое время вычислить клиентский key, а зная последний хеш (подсмотрев при передаче), можно его без изменений использовать в дальнейшем как клиентский password. Готово.
Я так понял, что javascript-овый вариант hex_hmac_sha1(a, b) эквивалентен PHP-шному hash_hmac('sha1', b, a), то есть аргументы a и b переставлены местами. Тогда я могу доказать, что ваша система не защищена в поставленных вами условиях.
В принципе, можно рассуждать так: если вызов можно эквивалентно представить в виде выражения

( 1 ) [ 2 ] (аргументы);

где 1 — выражение, результат вычисления которого равен какому-то объекту, а 2 — выражение, результат вычисления которого равен какой-то строчке (имя свойства) или числу (индекс), то this будет равен выражению 1.
Если так представить нельзя, то this будет равен window.
Причём код

with ({foo: function () {alert(this);}}) {
  foo();
}

(теоретически) можно представить как

( {foo: function () {alert(this);}} ) ["foo"] ();

что соответствует первому случаю :)

Аналогично:

foo.prototype.constructor(); // эквивалентно ( foo.prototype ) ["constructor"] ();
(foo.prototype.constructor)(); // эквивалентно ( foo.prototype ) ["constructor"] ();
(foo.prototype.constructor = foo.prototype.constructor)(); // нельзя представить в таком виде
Я для себя запомнил так: this внутри функции имеет то значение, чему равно выражение перед точкой при вызове функции. Если точки нет или используется какое-то хитрое выражение типа (x=«q».toString)(), то он равен глобальному объекту, window. И это если не учитывать всяких new f() и f.call()/apply().
Мне кажется, лучше выделять не цветом фона, а изменять цвет ника автора комментария, тогда это не будет пересекаться с подсветкой новых комментариев. А цвет взять примерно тот же, каким написан ник автора в нижней плашке топика (#CF0000).
Уверен лишь в третьем — b (false).
foo() вернёт window, foo.prototype.constructor() вернёт foo.prototype, который не равен window.
На самом деле я знаю, как это работает, но не могу запомнить, как это называется, поэтому по привычке называю так :) Возможно, другие люди тоже понимают, что «по ссылке» применительно к JS означает «по разделению».
Ну не скажите… В Си/Си++ всё передаётся по значению.
Что в этом неожиданного? Объекты в JS передаются по ссылке, это и новичку должно быть известно.
0/0 даёт NaN — это неопределённая операция.
1/0 даёт бесконечность — это общепринято в математике.
typeof null; // object
null === Object; // false
/*
null, хоть и имеет тип "object", не является Object'ом
*/

Тут мне не очень понятно, а что, собственно, ожидалось? Аналогично:

var x = {};
typeof x; // object
x === Object; // false
/*
x, хоть и имеет тип "object", не является Object'ом
*/

Может, вместо === использовать instanceof? Будет веселее (хотя тоже всё логично):

var x = {};
null instanceof Object; // false
x instanceof Object; // true
Заминусованный ответ от ivlis выше — правильный?
Объясните, зачем в конец некоторых цепочек вставлено "-j RETURN". Это ж вроде действие по умолчанию.
И ещё, почему б не объединить, например,
--dport 137
--dport 138
--dport 139

в
--dport 137:139

Ещё можно объединить 4 фрагмента "# drop all MS stuff so that it won't clutter logs" в один с циклом.

И, наконец, как я понимаю, этот скрипт — не панацея, а, скорее, некоторые идеи администратору на заметку.
Вы, наверное, в курсе, что если зайти на ваш сайт с отключенным javascript, то отображается небольшой текст, среди которого есть ссылка «изменить настройки». Но вы, возможно, не в курсе, что та ссылка ведёт на 404.

А по теме: возможно, «обычная» нравится меньше, потому что там «Регистрация» выглядит как ссылка (не все ещё привыкли к тому, что если подчёркивание не сплошное, то это js-кнопка) и пользователь боится, что нажав на неё, он попадёт на другую страницу с кучей полей для заполнения. А радио-кнопка «Я еще не зарегистрирован» не вызывает таких опасений (нажав на неё, пользователь ничего не теряет).

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Registered
Activity