使用AJAX安全地导入受保护的js文件的内容

时间:2013-02-15 21:44:27

标签: php javascript security jquery import

要导入js文件很简单...只需使用>脚本src ='file.js'type ='text / javascript'>> / script>
但随后源代码将显示该文件内容的直接URL。

内容应该是可执行的,但不能通过使用源URL直接查看 使用AJAX将file.js的内容加载到内存的最佳方法是什么。

我来到以下最初的工作方式(只是和想法,完全有缺陷?):

function get_contents() {

      -> ajax execute PHP {copy 'file.js' to 'token.js' in tmp-directory}
      -> ajax get contents of 'tmp/token.js' and load to memory
      -> ajax execute PHP {delete 'tmp/token.js' in tmp-directory}

      return(true);    // content (ie. functions) should now be usable
      }


但我不确定第二个ajax excute是否足以让现在能够成功调用这些函数 PHP返回内容,但javascript'ajax success'可能会看到它(并将其存储)为变量... doh!

这个ajax成功的想法是否会起作用? 有人可以提出更好的建议吗?

修改
根据最初的反应,这种工作方式实际上是人类不可能的 将通过以“正常”不受保护的方式加载常用函数来解决它,并使用Jerry的建议(请参阅注释)进行较少发生的计算。


编辑#2:
下面提到的(耗时的)问题可以通过下面的模板来解决 仍在使用建议的“隐藏的PHP代码”方法 我正在使用缓冲区(或一些东西),比如Youtube视频......除了“视频数据”是“来自AJAX-PHP函数的结果”。

AJAX request "30 cycle", "60 cycle", "300 cycle", "600 cycle"
     store result to buffer
initiate "start cycle"

function cycle() // run every second !!
{
//do stuff... no AJAX needed
//do some more stuff... like animations and small calculations

//per 30 cycle (30 seconds)
if ($cycle==30)
    {
    perform last "30 cycle" AJAX result [PHP-function set "A"]
    ... when finished: AJAX request "30 cycle"
                            store result to buffer in 'background'
    }

//per 60 cycle (1 minute)
if ($cycle==60)
    {
    perform last "60 cycle" AJAX result [PHP-function set "B"]
    ... when finished: AJAX request "60 cycle"
                            store result to buffer in 'background'
    }

//and so on....
}

初始问题99%已解决(-1因为开发人员工具) 感谢您的评论和建议。

1 个答案:

答案 0 :(得分:1)

即使您将JavaScript文件拆分为许多单独的函数,也只需要很少的工作就可以将它们全部重新组合在一起。

使用现代浏览器,即使文件“加载到内存中”,您也可以确切地看到加载的内容。

尝试使用浏览器附带的开发人员工具,您可以使用它们查看何时进行Ajax调用,确切地说是以文本格式加载的内容。

如果您正在混合PHP和JavaScript,那么您应该在PHP代码中放置任何敏感内容,同时使用JavaScript来呈现PHP提供的结果。

编辑:根据您的更新,您可以不执行此操作而不是执行“周期”吗?


function pollAjax()
{
   $.ajax({
      -- ajax settings --
    }).success(function(data) {
        // do something with our results
        doSomething(data);
        // Fire again to get the next set of results. 
        setTimeout(function() {pollAjax()}, 10);
   });
}

这意味着您不太可能使用1000个待处理的ajax请求挂起浏览器它会询问结果,当它获得结果时,它会要求下一组结果。