Ответ 1
Я думаю, что есть несколько подробностей, относящихся к формам неповторимого рывка:
- Префикс
-
{}&&
относится кJSON
Parsers (по-видимому и, например, Dojo в более старых версиях), не проверяя строкуJSON
как действительный синтаксисJSON
. Все библиотеки parserJSON
, которые я знаю о проверке в настоящее время, но это сообщение в блоге с 2008 года говорят о том, что указанные версии Dojo разрешитеJSON.parse
json нормально, аeval
просто провалится, что даст вам удобную защиту от угонаJSON
. -
while(1)
можно сделать неэффективным с использованием прототипаNumber
, присвоив0
как1
значение. -
for(;;)
иwhile(1)
оба из них приводят к сбою захваченного сайта, что делает его более сложным, поскольку каждое последующее выполнение любого script эффективно прекращается без ошибок. Это важно, потому что ошибка по определению не помещает конец выполнения script в javascript, аfor(;;)
гарантирует, что после него не будет script. Это необходимо для предотвращения (гипотетических гипотетических ситуаций) ситуаций, когда злоумышленник успешно перехватывает ошибки script, используя недостатки вwindow.onerror
, перезаписываяeval
или проксирование объекта объекта ошибки (например, перезаписываяconstructor
ofError.prototype
).UPDATE
Существует также этот вопрос в security.stackexchange, предлагающий не использовать
for(;;)
илиwhile(1)
, поскольку это может означать, что ваш сайт DoS-атакует клиентов CPU или запуск вредоносных сканеров. Я не вижу серьезной проблемы с DoS с современными браузерами, поскольку они работают изолированно и на основе вкладок. Но это, безусловно, проблема со старыми браузерами. Сканеры вредоносных программ являются реальной проблемой и могут сообщать о вашем сайте как атаке. -
&&&START&&&
(и соответствующий тег&&&END&&&
) делают парсинг на стороне клиента, получая json проще, чем просто используя)
или комментарии, которые могут быть закрыты непреднамеренно, и могут улучшить читаемость и видимость для программист. Обтекание комментариями является лишь вариантом этого, так как он обеспечивает начало/*
и тег*/
. По-моему, четкая и ясная отметка в начале и в конце помогает заметить смысл крути. Использование комментариев на самом деле не обеспечивает этого.