Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.01.2016, 18:42
Новичок на форуме
Отправить личное сообщение для psihoz26 Посмотреть профиль Найти все сообщения от psihoz26
 
Регистрация: 04.05.2014
Сообщений: 6

Как тут выполняется код без eval/function/etc ??
пару примеров с alert(1)

1.
toString.constructor.prototype.toString=toString.call;["","alert(1)"].sort(toString.constructor)


2.
a="constructor";b={};a.sub.call.call(b[a].getOwnPropertyDescriptor(b[a].getPrototypeOf(a.sub),a).value,0,'alert(1)')()



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

Последний раз редактировалось psihoz26, 15.01.2016 в 19:33.
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2016, 20:03
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от psihoz26 Посмотреть сообщение
пару примеров с alert(1)

1.
toString.constructor.prototype.toString=toString.call;["","alert(1)"].sort(toString.constructor)
изящный прикол.
объяснить несложно, но придумать такое я бы не смог

сначала для наглядности заменим toString.constructor на Function (это он и есть), и для большей наглядности toString.call на Function.prototype.call, чтобы не забыть откуда что берется:
Function.prototype.toString = Function.prototype.call;
["", "alert(1)"].sort(Function);


далее, при сортировке, поскольку элементов всего 2, callback сравнения будет вызван только один раз, и это будет вызов Function("", "alert(1)"), который в результате вернет функцию, делающую алерт(1).

Но результат этого callback'а надо сравнить с 0, для чего у него (результата Function("", "alert(1)")) вызывается метод valueOf(), который для функции просто использует toString().

И вот тут вспоминаем, что у функций теперь вместо toString реально используется call. Фактически мы делаем Function("", "alert(1)").call(), т.е. просто вызываем созданную функцию.
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2016, 20:03
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

по второму примеру влом раскуривать что такое getOwnPropertyDescriptor, позже гляну )
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как работает данный код Victor031 Общие вопросы Javascript 4 10.02.2015 08:12
Аккордеон меню, как доработать код. Gawk Общие вопросы Javascript 1 23.07.2012 13:01
подскажите с eval, как обработать код? czp Общие вопросы Javascript 7 13.05.2012 20:37
Как писать код который легко поддерживать, расширять, читать. Policeman Общие вопросы Javascript 3 24.03.2012 05:40
Как передать код html страницы из фрейма на сервер vuler Общие вопросы Javascript 5 20.02.2012 16:31