Мне нужно кое-что переделать, потому что мы меняем наш CSP, чтобы блокировать unsafe-inline и unsafe-eval. Сейчас я пытаюсь привязать функцию, имя которой я не узнаю до момента выполнения, к событию «щелчок».
Я обновляю модули TOF/EOF, которые другие разработчики вызывают для создания своих экранов. Исходному коду более 20 лет. Однако дни, когда можно было просто использовать eval(string), определенно подходят к середине.
Мне нужно сделать несколько таких привязок, и большинство из них подходят, но одна меня расстраивает. Приведенные ниже фрагменты кода должны легко выполняться. Конечно, вам нужно будет передать им строку, которая будет анализироваться доступной функцией.
Это работает.
Строка, с которой я начинаю, — «next_page(1)»
Код: Выделить всё
/*
* Bind prior action click listener
*/
document.getElementById("priorAction").addEventListener('click',function() {
var cleanString = /(.*)(\()(.*)(\))/;
var cleanMatcher = commandString.match(cleanString);
fn = cleanMatcher[1] ? cleanMatcher[1] : "console.log";
dn = cleanMatcher[3] ? cleanMatcher[3] : "String for prior action not understood: " + commandString;
window[fn](dn);
});
Я начинаю с строки _CF_checkbr([object NodeList])
Код: Выделить всё
document.getElementById("submit_link").addEventListener('click' ,function() {
var cleanString = /(.*)(\()(.*)(\))/;
var cleanMatcher = commandString.match(cleanString);
fn = cleanMatcher[1] ? cleanMatcher[1] : "console.log";
dn = cleanMatcher[3] ? cleanMatcher[3] : "String for prior action not understood: " + commandString;
if (window[fn](dn) ) {
sendPage(thisForm);
}
});
Код: Выделить всё
webskinFunctions.js:151 Uncaught TypeError: window[fn] is not a function at HTMLImageElement. (webskinFunctions.js:151:18)Я не понимаю почему в одном случае это работает, а в другом нет.
Код: Выделить всё
new Function(){}Мои вопросы:
- Что мне нужно здесь искать?
- Я пропустил информацию, необходимую для ответа на этот вопрос?
- Поскольку я пытаюсь обойти политику безопасности, что мне следует учитывать, чтобы не создать уязвимость?
_____________________
В конце концов, этот код работает. Проблема локальна для одного экрана и связана с тем, что экран генерирует javascript на лету, что в лучшем случае затрудняет правильное время выполнения сценария.
Сейчас я выполняю очистку кода и попросил человека, у которого есть экран, это исправить.
Строка, с которой я начинаю, — это _CF_checkbr([object NodeList])
Код: Выделить всё
document.getElementById("submit_link").addEventListener('click' ,function() {
var cleanS1String = /(.*)(\()(.*)(\))/;
var cleanS1Matcher = commandString.match(cleanS1String);
fn = cleanS1Matcher[1] ? cleanMatcher[1] : "";
dn = cleanS1Matcher[3] ? cleanMatcher[3] : "";
if (window[fn](dn) ) {
sendPage(thisForm);
}
});
Подробнее здесь: https://stackoverflow.com/questions/798 ... is-dynamic
Мобильная версия