Pull to refresh
3
0
Send message
Без паролей же база становится в разы менее лакомой добычей.

1. Поясните, пожалуйста, почему Вы так считаете?

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

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

token не обязан быть uuid'ом, вы можете сделать и более короткие токены, которые можно даже ввести вручную. Но в этом случае вероятность коллизии и его надежность могут значительно ухудшиться.

2. Правильно я понимаю, что token Вы храните в открытом виде?

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

3. Почему авторизация делается по e-mail, а не по нику?
Если предположить что Ваш метод станет массовым (и при этом подбор токена за обозримое время будет невозможен), то основным ветктором атаки будет атака на e-mail (пиьсма с вирусами, фишинг и т.п.). В этом случае e-mail лучше лишний раз нигде не афишировать.

4. Чем Ваш подход принципиально отличается от обычного с использованием пароля?
Под обычным я понимаю подход когда:
1) пользователь вводит ник и пароль на сайте
2) также указывает почту, на которую приходит ссылка с подтверждением, но не сам пароль
3) теоретически можно добавить флаг прислать пароль в открытом виде на почту

Преимущества:
  • Про использование ника описано выше.
  • Отсутствие пароля на почте поможет, на случай, если почта будет скомпрометирована: когда пароль будет сброшен — пользователь зайти на сайт не сможет и поймёт что почта скомпрометирована.
  • Если нужно зайти на сайт на чужой машине — вводится ник и пароль. Затем в ближайшее время с надёжного компа сбрасывается пароль (не афишируя на чужой машине ни почты, ни пароля от неё).


Ваш подход:
1) ник недоступен
2) ссылка подтверждения выполняет и функцию пароля (переданного в открытом виде), фактически совмещая 2) и 3)

А продвинутые пользователи будут вынуждены придумывать специальный пароль для вашего сайта или пользоваться менеджером паролей.

Кстати, при использовании Вашего подхода никто не мешает пользователю сохранить ссылку с токеном в менеджер паролей.
У меня складывается впечатление, будто современному обществу навязывают мнение, что жизнь — штука не особо ценная.

Что касается технологий, это проявляется в том числе в терминологии (например, smartphone, machine learning и т.д.), когда качества свойственные человеку (smart, learning) приписывают техническому устройству (smart, machine). Тем самым уникальные особенности человека принижаются. Примерно по следующей схеме:

«Если задачи которые раньше мог решать только человек теперь может решать техническое устройство, то ...»

Для человека, как для живого существа первично всё что касается жизни, а то, что касается инструментов (техники) — вторично.

Это и хотел отразить в заключении.
Изначально у Вас функция counter использовалась для только для подсчёта слов и это было хорошо.

Чтобы функция counter не зависила от компонента реализующего GUI достаточно было:

1. задавать имя файла как аргумент функции counter:
def counter(filename):

2. возвращать полученные значения в виде кортежа:
return (len(words), len(nonrep_words))

Когда Вы добавили в функцию counter часть функционала, связанного с работой GUI — стало хуже. Теперь логика программы привязана к варианту взаимодействия с пользователем.

В целях самообразования рекомендую Вам:
1) всё что касается работы с GUI вынести в отдельную функцию
2) добавить функции для вывода результата в stdout и для вывода в файл
3) с помощью стандартной библиотеки argparse реализовать различные варианты запуска вашей программы

Например, при запуске с параметрами:
--input file_in брать данные из file_in и выводить результат в stdout
--input file_in --output file_out брать данные из file_in и выводить результат в file_out
--gui запускать приложение с графическим интерфейсом

В сочетании с
if __name__ == '__main__':
    ...

п. 1) позволит Вам как запускать данный скрипт на исполнение, так и экспортировать из него отдельные функции, например, counter

п. 3) наглядно покажет преимущество отделения логики от представления.
Вот например я очень люблю материться. Почему автор считает это болезненным состоянием? По-моему болезненно это как раз сдерживать в себе то, что вреда никому не причинит, однако даёт ощутимую эмоциональную разрядку.


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

Общаясь со своими близкими (в том числе родителями) вы позволяете себе материться или сдерживаетесь? Я, например, считаю неприемлемым сквернословить при родителях.

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

Психическое воздействие
Ситуация 1:
Человек находится в комфортных условиях жизнедеятельности, желание матершины отсутствует.
Ситуация 2:
Человек находится в условиях продолжительного эмоционального напряжения (стресса) и неприятных эмоций и пытается снять напряжение матершиной.


Физическое воздействие
Ситуация 1:
Человек дышит чистым вохдухом и ему хорошо. Он не кашляет.
Ситуация 2:
Человек дышит загрязнённым воздухом, ему нехорошо, в горле першит и человек кашляет.
При этом человек может говорить "как мне не кашлять если в горле першит?".

Благодарю за комментарий по существу!


Ознакомился с этимологией (oxford dictionaries) и согласен, что real и valid не синонимы в английском языке. Сам попал в ловушку непонимания иностранного слова!
Хотел сказать что, в определённом контексте "valid" может переводиться на русский как "действительный".


  1. Поправьте, если ошибаюсь, я бы примеры использования valid (oxford dictionaries) перевёл так:


    ‘a valid criticism’ - обоснованная критика
    ‘a valid contract’ - имеющий силу (действительный) договор
    ‘a valid password’ - действующий (действительный) паспорт

  2. Скажите, пожалуйста, на Ваш взгляд можно ли говорить, что "действительный" это второстепенное значение слова valid при переводе на русский язык? А если нет, то насколько далеки эти понятия друг от друга?


  3. Ниже мои рассуждения по этому вопросу (но к итогу пока не пришёл). Если дополните (скорректируете), буду признателен.

С одной стороны on-line Cambridge dictionary предлагает переводить valid как


1) веский, серьезный 
2) действительный, имеющий силу

с добавкой перевода validity как
1) действительность, вескость

С другой, в примерах употребления слова valid c сайта lingvolive оно не переводится напрямую, а скорее используется как вспомогательное слово для передачи общего смысла.


С третьей стороны, если слово valid имеет латинское происхождение, то переводить его как "действительный" можно в достаточно широком смысле (но, да, значение второстепенное).


перевод validus с латинского (ingvolive)


1) сильный, крепкий (homo Pl; ungues, sc. aquilae VF; taurus O), прочный (abies PM); могучий (vires Enn etc.); мощный (ventus, flumen Lcr); могущественный (hostis L; urbs C)
2) здоровый, укрепляющий, питательный (cibus CC)
3) сильнодействующий (venenum f.); действенный, активный (medicamenta CC)
4) здоровый (nondum ex morbo satis v. l.)
5) имеющий силу, действительный (senatus consultum T); энергичный (dicendi genus Q)

С четвёртой, создаётся впечатление, что перевод слова valid как "действительный" возможен лишь в узком смысле (касательно права и юридических терминов).


перевод valid с английского (ingvolive)


1) юр. действительный, имеющий силу; правомерный
2) веский, обоснованный (довод, возражение)
3) эффективный, надёжный, действенный

В блоке "добавить в мой словарь" предлагают: 'действительный; имеющий силу; правомерный'.

С учётом возможного французского происхождения — перевод valide с французского (ingvolive):


1) крепкий, здоровый; работоспособный, трудоспособный; годный к военной службе
2) законный, узаконенный, действительный; действующий
На мой взгдяд, человек постепенно начинает мыслить на том языке, который чаще использует.
Если бы было легко мыслить на разных языках, то не использовали бы кальку с иностранного.

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

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

Когда ребёнку нужно формулировать свои мысли и на одном языке, и на другом — может случиться перегрузка, тогда даже родной язык (и культура!) будут усвоены не полностью.
Ну или догма о необходимости загоняния (загнатия, впихования) всё и вся в лоно родного языка. Простите, но нахрена? Вы знаете хотя бы одного программиста, который не говорит по-английски? Большинство книг и учебных материалов тоже на английском.

Я не утверждаю, что всё нужно, как Вы выразились, «загонять в лоно родного языка». Я утверждаю, что человек понимает на родном языке.
Если кто-то в совершенстве овладел несколькими языками, способен на них думать, писать стихи и т.д.это здорово!
Если кто-то может свободно общаться на профессиональные темы с зарубежными коллегами — тоже хорошо.
Я также не против использования заимствованных слов в повседневной речи (если что-то появилось и в языке нет для этого слова — использовать заимствованное вполне приемлемое решение).
На мой взгляд, плохо когда:
1) в повседневной речи используются кальки (не заимствования) с иностранных слов.
2) нет книжки профессиональной тематики на родном языке, того же качества разъяснения материала, какая есть на языке иностранном
3) иностранный язык преподают маленьким детям (в детском саду, например, или в начальных классах), которые ещё не успели освоить родной язык
Договор все и всегда будут перечитывать. Точно так же ЧТД будут перечитывать и продавцы, и покупатели.

Безусловно ту версию, которую люди подписывают им следует перечитать. Тут я с Вами полностью согласен.

Не нужно вычитывать отдельно договора каждого диллера ...

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

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

  1. Человек пассивно согласился с предложенными (пусть навязанными) условиями. В дальнейшем пытаться им манипулировать проще, поскольку предпосылки манипулирования закладываются в формулировках договора.
  2. Человек сам обсуждает и согласовывает условия договора на равных. В дальнейшем пытаться им манипулировать сложнее, поскольку попытка выйти за рамки формулировок договора — это противоречить самому себе.

А помимо них может быть и множество иных ситуаций, в том числе тех, когда ЧТД не поможет.
Например: предложат в подарок (по акции) доп.оборудование и проведут как доп. соглашение (с изменением трактовки того или иного пункта ЧТД).
Жизнь многообразна в своих проявлениях.
Только в ГИБДД договор на несколько страниц могут завернуть, потому что выверять написанное «в соответствии» никому не хочется.

Договор на пяти страницах убористым шрифтом (не считая приложений) о покупке нового автомобиля. Регистрация в ГИБДД заняла около получаса (записывался через госуслуги заранее) — был приятно удивлён. Возможно дело в том, что автомобиль новый, не знаю.
Государство дало возможность заключать договора в свободной форме, и это правильно.
Юристы предлагают варианты типовых договоров, соответствующие текущему законодательству, и это хорошо.
Наука (computer science) создала инструменты для удобной работы с информацией, а предприниматели (Github) позволяют бесплатно использовать хранилище, доступное по сети, и это особенность нашего времени.

От человека требуется всего лишь проявить инициативу в том, что ему небезразлично.
Изначально, как более простой формат хотел использовать reStructuredText. В нём есть удобная возможность задавать переменные (например, ФИО, цена и т.д.) и подставлять их значения в тексте договора где требуется.
Так можно логически отделить (вынеся переменные в начало документа) рыбу договора от данных Дилера и Клиента. Хотелось бы, конечно, разделять рыбу договора от данных физически (хранить в разных файлах).

Отказался от reStructuredText, поскольку не смог решить несколько оформительских задач:
  1. Добавить на каждой странице подписи Покупателя и Продавца в нижнем колонтитуле.
  2. Выровнять в рамках одной строки дату по правому краю, а город по левому (хотя это и в текущем TeX варианте пока не работает — город съехал ниже).

С Markdown плотно не работал, мне видится, что он схож с reStructuredText в том, что предназначен для «компьютерных» документов. Поэтому столкнувшись с проблемой вёрстки «бумажного» документа, перешёл на TeX, как инструмент, предназначенный именно для вёрстки «бумажного» документа.

Если в Markdown можно сверстать аналогичный pdf и поддерживаются переменные — научите как, буду благодарен! Главное, чтобы по текстовому исходнику было легко собрать приемлемый pdf.
В перспективе можно поддерживать несколько вариантов разметки — пусть каждый работает с тем, что привычнее.
Отвечая на Ваш комментарий ниже — я обращался исключительно к официальным дилерам.
По данному комментарию, согласен с Вами, что основные положения регламентированы. Но есть нюанс — наша российская специфика. Живой пример с которым я столкнулся, обратившись к дилеру бюджетной марки, которую купил более дорогой бренд. Дело было так:

Есть марка «A» и марка «Б», позиционируемая как «A для бедных» и дилерские центры их расположены один от другого не более чем в 50 метрах.
Так вот я обратился в «А для бедных» с просьбой предоставить типовой договор. Мне прислали скан договора двух дневной давности марки «А»! Договор был неполный. Видимо, решили не присылать последнюю страницу с подписями.
Зато паспортные данные клиента, номер ПТС и VIN, название модели и цену сделки с фирмой «А» получил человек обратившийся в «Б» с совсем иным запросом.

Закон о персональных данных есть. Покупатель, наверное (договор же не полный) сам разрешил использовать свои персональные данные, поставив подпись в договоре. Всё по закону, но!
Имхо, ситуация выглядит дико. Что же это за бизнес, для которого проще переслать скан готового документа вместо типового шаблона?

Проблема не в том, что нет типовой формы, проблема в том, как она используется и используется ли вообще.
ЧТД — это способ самоорганизации людей. Когда люди захотят то, что уже есть начнёт применяться более правильно.

Information

Rating
Does not participate
Registered
Activity