读取JS数组的安全性问题?

时间:2014-12-05 17:48:38

标签: javascript jquery

我正在构建一个网站,该网站在服务器上的scripts文件夹中的.js文件中有一个JS多维数组。在阵列中将是视频嵌入代码(Vimeo iframes)以及作曲家,演员和片段名称的附加字符串。阵列中将有大约1000个视频。

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存在安全问题需要考虑,但在这种情况下,我应该关注对数据或网站的任何威胁吗?我的想法是脚本只能读取数据并打印出来,所以没有人可以做,但我不确定。数据不敏感。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

问题是,如果有人可以在读入之前更改文件,他们可以将任何JavaScript代码注入其中。更改文件的一种方法是破解您的服务器,但是也可以通过接管不必触摸你的机器的代理来做到这一点。他们不得不以某种方式诱骗客户通过代理,但你不能阻止它发生。

对此最简单的解决方法是使用JSON文件而不是JavaScript文件。 JSON的语法非常接近用于JS文字的语法:据我所见从您的示例中,您需要对文件进行的唯一更改是摆脱&#34; var videos =&#34;在开始时将单引号换成双引号。在代码中,交换任何有效的方法:

// 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(旧浏览器具有polyfill)而不是eval 。我们这样做是因为它通过专用的JSON解析器而不是JavaScript来解析代码。 JSON不知道如何处理代码,因此即使攻击者试图通过更改文件来注入代码,更改的代码也不会起作用,因为JSON不知道如何处理它。显然,你不希望你的应用程序停在中间,但它比让攻击者接管更好。