Я пишу библиотеку PHP, которая генерирует код Javascript.
В коде Javascript есть несколько компонентов с именами component001
, component002
и т. Д.
Страницы загружаются динамически через AJAX.
Мне нужно передать имя компонента через переменную URL, которая затем обрабатывается сценарием.
Единственный способ, которым я защищаю то, что уклоняется, - это регулярное выражение ^component[0-9]{3}$
: если оно проходит, его убирают, в противном случае - нет.
Для меня это на 100% безопасно, поскольку ничего не будет выполнено, если это не просто имя одного из моих известных компонентов или что-то в команде eval()
, которую можно использовать в этом примере кода, например внедрение регулярных выражений, какой-то межсайтовый скриптинг и т. д .?
window.onload = function() {
// *** DEFINED IN ANOTHER JAVASCRIPT FILE:
var component001 = 'testing111';
var component002 = 'testing222';
var component003 = 'testing333';
var APP = {};
APP.getUrlVars = function() {
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
APP.getUrlVar = function(name, defaultValue) {
defaultValue = (typeof defaultValue == 'undefined') ? '' : defaultValue;
var vars = APP.getUrlVars();
if(vars[name] === undefined)
{
return defaultValue;
} else {
return vars[name];
}
}
APP.safeEval = function(nameOfComponent) {
var REGEX_VALID_NAME = /^component[0-9]{3}$/;
if(REGEX_VALID_NAME.test(nameOfComponent)) {
return eval(nameOfComponent);
} else {
return 'ERROR';
}
}
// *** JAVASCRIPT FILE LOADED VIA AJAX:
var nameOfComponentToDisplay = APP.getUrlVar('compname', 'component001');
var component = APP.safeEval(nameOfComponentToDisplay);
document.write(component);
}