Ограничить / проверить код JavaScript для конкретной библиотеки - PullRequest
0 голосов
/ 24 октября 2018

У меня есть проект, где пользователи могут отправлять код JavaScript.Однако я хочу проверить, что внутри представленного кода используются только методы и свойства определенного объекта javascript.например, мой объект называется X, тогда пользователям разрешено использовать только:

X.method1();
X.method2();
X.method3(X.propertyA);
if(X.booleanPropertyB)
{
    X.method(X.propertyWOW);
}

Им НЕ разрешается создавать новые переменные или использовать свойства или методы объектов javascript, таких как документ, окно или навигатор.

Какой будет хороший подход для проверки подлинности сценариев в соответствии с этими правилами?Либо внутри JavaScript, либо с помощью валидатора на стороне сервера, например, написанного на Java.

До сих пор моя идея заключается в том, чтобы использовать валидатор на стороне сервера и проверять, чтобы первые непробельные символы после каждой точки с запятой, а также после каждого открытия были вьющимисяскобка "X".или зарезервированное слово, например if, else, while, for и т.д.

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

Спасибо.

1 Ответ

0 голосов
/ 24 октября 2018

Ваша проблема состоит из двух частей:

  1. Убедитесь, что пользователи используют ваш объект X

Этого можно добиться, высмеивая ваш объект в тестах и ​​проверяя, если соответствующие методы объектаиспользуются.Смотрите здесь как это делается с Жасмином

Ограничение доступа пользователей к определенным API-интерфейсам. Простой способ добиться этого - запустить пользовательский код внутри замыкания.например,

;(function(window, document, console, eval, alert, setTimeout, setInterval){

// run user code here
// window, document etc. are inaccesible and null in this context
})(null, null, null, null, null, null);

Это, однако, не мешает пользователям объявлять свои собственные вещи, переменные, функции и тому подобное.

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