2014-12-05 4 views
0

Я создаю веб-сайт, который будет иметь многомерный массив JS в файле .js в папке сценариев на сервере. В массиве будут коды встраивания видео (Vimeo iframes) и дополнительные строки для композиторов, игроков и имена штук. В массиве будет около 1000 видеороликов.Проблемы с безопасностью при чтении массива JS?

var videos = [ ['embed code', 'composer name', 'player name', 'piece name'], ['embed code', 'composer name', 'player name', 'piece name']...]; 

Там будет текстовое поле поиска для пользователей, чтобы сделать конкретные поиски композитором, плеер и т.д. Скрипт JQuery будет перебирать каждый внутренний массив, чтобы найти совпадения запроса пользователя и представить их на этой странице. Это будет выглядеть в основном так:

function getArray(video) { 
    if (campyear === video[j]) { 
     var pos = video.indexOf(video[j]);     
     $('#searcharea').append('<td>' + video[(pos - pos)] + '</td><td><h3>Composer: ' + video[(pos -pos) + 1] + '</h3><br><h3>Player: ' + video[(pos - pos) + 2] + '</h3><br><h3>Piece: ' + video[(pos - pos) + 3] + '</h3></td>'); 
    } 
     else 
     noResultCount++;      

     if (campyear === video[j] && count % 2 === 0) 
     $('#searcharea').append('</tr><tr>'); 

     if (campyear === video[j]) 
     count++; 

     if (i === videos.lenght && j === 4) 
     $('#searcharea').append('</table>'); 

     if (noResultCount === videos.length * 5) 
     $('#searcharea').html("<h4>No results found for " + yearvalue + " " + buttonvalue + ". Not all camps have videos for every year.</h4>"); 
     $('#searcharea').fadeIn(500); 

    } // End of getArray() 
... 
... 
... 

for (i = 0; i < videos.length; i++) { 
     for (j = 0; j < 5; j++) { 
     getArray(videos[i]);   
     } 
     } 

Я знаю, что есть проблемы безопасности с традиционными базами данных SQL и PHP, которые должны быть рассмотрены, но в этом случае я должен заботиться о каких-либо угроз для данных или веб-сайт? Моя мысль заключалась в том, что сценарий может читать только данные и печатать их, поэтому мало кто мог это сделать, но я не уверен. Данные не чувствительны.

Спасибо за ваше время.

+2

Все источники javascript являются общедоступными, но если ваши данные не чувствительны, это не должно представлять проблемы – juvian

+0

В массиве содержатся данные, которые вы хотите, чтобы люди «видели», не так ли? Если да, то почему возникает проблема безопасности? –

+4

«Многомерный массив JS в файле .js» - остановитесь прямо там. Если вы не используете [JSON] (http://api.jquery.com/jquery.getjson/) для этого, вы должны быть. – Blazemonger

ответ

1

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

Простейшим решением для этого является использование файла JSON вместо файла JavaScript. Синтаксис JSON очень близок к синтаксису, используемому для JS-литералов: насколько я могу видеть из вашего примера, единственные изменения, которые вам нужно внести в файл, - это избавиться от «var videos =» в начале и поменяйте свои одиночные кавычки на двойные кавычки. В коде, обмен независимо от работы на этот счет:

// Assume that getJS() grabs your JavaScript file 
// and returns a String with the text of that file. 
var videoCode = getJS(); 
eval(videoCode); 

... для чего-то, что работает так:

// Assume that getJSONData() grabs your JSON 
// and returns a String with the text of the file. 
jsonData = getJSONData(); 
var videos = JSON.parse(jsonData); 

Обратите внимание, что мы используем JSON.parse (который имеет polyfills для старых браузеров) вместо eval. Мы делаем это, потому что это ставит код через выделенный JSON-синтаксический анализатор вместо JavaScript. JSON не знает, как обращаться с кодом, поэтому даже если злоумышленник пытается ввести код, изменив файл, измененный код не будет работать, потому что JSON не будет знать, что с ним делать. Очевидно, вы не хотите, чтобы ваше приложение просто останавливалось посередине, но это лучше, чем позволить атакующему взять верх.

+0

Если кто-то может изменить файл JS, содержащий данные, возможно, он также может изменить файл JS, содержащий фактическую логику приложения. По этой логике я не должен писать сайт вообще, потому что все может быть захвачено. –

+0

@FelixKling: Это выполняется только в том случае, если ваши данные всегда поступают из статических файлов, что не очень безопасно. Все больше приложений получают динамически генерируемые JSON, в том числе JSON, созданные из пользовательского контента.В последнем случае теоретически вы узнаете о проблемах XSS на стороне сервера: пользователь может попытаться создать неверный ввод, который подталкивает ваше приложение к инъекции произвольного JavaScript в отправляемые им данные, не затрагивая никаких файлов на сервере. Использование надлежащего JSON-синтаксического анализатора против этой возможности: даже если появляется ошибка XSS, парсер JSON не пропустит его. –

Смежные вопросы