Действительно ли это иррационально для очистки строк случайных символов для слов проклятия? [закрытый]

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

Например, предположим, что у вас есть страница, отображающая последние 50 Заказы на странице «Ваши заказы». 50 - это Волшебный номер здесь, потому что он не установлен стандартным или условным, это число, которое вы определили по причинам, изложенным в спецификации.

Теперь, что вы делаете, у вас есть 50 в разных местах - ваш SQL-скрипт (SELECT TOP 50 * FROM orders), ваш сайт (ваши последние 50 заказов), ваш логин вашего заказа (for (i = 0; i < 50; i++)) и, возможно, много других мест.

Теперь, что происходит, когда кто-то решает изменить 50 до 25? или 75? или 153? Теперь вам нужно заменить 50 во всех местах, и вы, скорее всего, пропустите это. Найти / заменить может не работать, потому что 50 можно использовать для других вещей, и слепо заменить 50 на 25 может иметь некоторые другие плохие побочные эффекты (т. Е. Ваш Session.Timeout = 50 вызов, который также установлен на 25, и пользователи начинают сообщать слишком частые таймауты ).

Кроме того, код может быть трудно понять, то есть «if a < 50 then bla» - если вы столкнулись с этим в середине сложной функции, другие разработчики, которые не знакомы с кодом, могут спросить себя «WTF - 50 ???»

Вот почему лучше всего иметь такие двусмысленные и произвольные числа в одном месте - «const int NumOrdersToDisplay = 50», потому что это делает код более читаемым («if a < NumOrdersToDisplay» , это также означает, что вам нужно только изменить его в 1 четко определенном месте.

Места, где подходят магические числа, - это все, что определено стандартом, то есть SmtpClient.DefaultPort = 25 или TCPPacketSize = whatever (не уверен, что это стандартизировано). Кроме того, все, что определено только в 1 функции, может быть приемлемым, но это зависит от контекста.

24
задан cletus 20 June 2009 в 03:53
поделиться

13 ответов

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

40
ответ дан 28 November 2019 в 22:13
поделиться

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

0
ответ дан Marc Charbonneau 16 October 2019 в 07:36
поделиться

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

1
ответ дан Scott Chamberlain 16 October 2019 в 07:36
поделиться

Microsoft исключает из своих ключей продуктов следующее:

0 1 2 5 A E I O U L N S Z

Я опускаю их в [0-9A-Z], и как только ключ сгенерирован, я сопоставляю с список, который я нашел из двухбуквенных комбинаций, наиболее распространенных на английском языке, и регенерируйте ключ, если есть совпадение. Для скорости я редактирую список буквенных пар, сначала выбрав из этого списка пары, которые уже запрещены из-за их включения символа в удаленный список («HE» не может существовать, если ключ генерируется из набора символов). который не включает «E»), затем преобразует некоторые из «E» в «3», как в «H3» вместо «HE» и т. д. Я также добавил несколько своих собственных, таких как «KK» и « CK 'для крайних случаев. При необходимости можно также опустить '3' для скорости, хотя чем больше символов вы пропустите, тем меньше уникальных ключей может быть сгенерировано.

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

6
ответ дан radiumsoup 16 October 2019 в 07:36
поделиться

Нет. У вас нет возможности собрать все ругательства на всех языках мира. Эти слова обычно не встречаются в словарях.

0
ответ дан 28 November 2019 в 22:13
поделиться

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

0
ответ дан 28 November 2019 в 22:13
поделиться

Ограничьте свои случайно сгенерированные "слова" шестнадцатеричными символами, и я не верю, что у вас будут какие-либо англоязычные проклятия. Это также подталкивает вас к тому, чтобы не тратить слишком много времени на генератор случайных слов.

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

1
ответ дан 28 November 2019 в 22:13
поделиться

См. Элементы, помеченные clbuttic

2
ответ дан 28 November 2019 в 22:13
поделиться

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

12345-67890-F ** KU-ABCDE-FGHIJ

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

4
ответ дан 28 November 2019 в 22:13
поделиться

Самое простое решение - создать из «очищенного» алфавита; используйте набор символов, которые не могут образовывать слова. Одно из предложений в одном из ответов - шестнадцатеричный, который является отличным выбором, или как-то иначе отбросьте несколько важных букв из алфавита.

Обратите внимание, что простое удаление гласных не поможет ... это слишком легко сделать вывод их из остальных согласных.

6
ответ дан 28 November 2019 в 22:13
поделиться

Да, на том основании, что любой, кто будет оскорблен чем-то, они увиденное в случайно сгенерированной строке может придумать больше вещей, которые они сочтут оскорбительными, чем вы можете очистить.

Не оптимизируйте для безумцев.

29
ответ дан 28 November 2019 в 22:13
поделиться

Думаю, лучше вообще избегать гласных. Ключ продукта, такой как JKL-YOUAREMYFRIEND-0001-KK, не может быть оскорбительным, но это также не похоже на серьезный бизнес.

2
ответ дан 28 November 2019 в 22:13
поделиться

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

1
ответ дан 28 November 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: