在Javascript中显示PHP变量-安全点

在Javascript中显示PHP变量-安全点,javascript,php,security,code-injection,Javascript,Php,Security,Code Injection,我最初的结构如下: index.html文件: ... <script src="myfunctions.js" /> ... ... function one() { .... } function two() { .... } function three() { .... } ... <?php include("myfunctions.js.php"); ?> ... <script> ... function one() { ....

我最初的结构如下:

index.html文件:

...
<script src="myfunctions.js" />
...
...
function one() {
....
}
function two() {
....
}
function three() {
....
}
...
<?php
    include("myfunctions.js.php");
?>
...
<script>
...
function one() {
....
}
function two() {
....
}
function three() {
....
}
function four() {
    var x = <?php echo $_conf['user_id'];?>
    console.log(x);
}
</script>
通过这种方式,我编写了2500多行Javascirpt,但随后我不得不向函数中添加一个PHP变量,因此我不得不将index.html重命名为index.PHP,将myfunctions.js重命名为myfunctions.js.PHP,并进行以下更改:

index.php文件:

...
<script src="myfunctions.js" />
...
...
function one() {
....
}
function two() {
....
}
function three() {
....
}
...
<?php
    include("myfunctions.js.php");
?>
...
<script>
...
function one() {
....
}
function two() {
....
}
function three() {
....
}
function four() {
    var x = <?php echo $_conf['user_id'];?>
    console.log(x);
}
</script>
。。。
...
myfunctions.js.php文件:

...
<script src="myfunctions.js" />
...
...
function one() {
....
}
function two() {
....
}
function three() {
....
}
...
<?php
    include("myfunctions.js.php");
?>
...
<script>
...
function one() {
....
}
function two() {
....
}
function three() {
....
}
function four() {
    var x = <?php echo $_conf['user_id'];?>
    console.log(x);
}
</script>

...
功能一(){
....
}
函数二(){
....
}
职能三(){
....
}
函数四(){
变量x=
控制台日志(x);
}
我已经实现了在JavaScript中使用PHP变量的目的,但我注意到浏览器中的网页开始显示所有包含的函数,也就是说,如果在第一种情况下,当我使用调试工具查看页面或将该页面保存在磁盘上时,我只看到index.html中包含的一些小JavaScript代码,但现在查看或保存index.php文件时,我会看到myfunctions.js.php中的所有函数可见。当然,可见的内容没有改变,但实际的输出增加了2500行。这会是一个安全问题吗?我应该避免这种在JavaScript中显示PHP变量的方式,还是不必担心它,让它保持原样


我担心的是,在第二种情况下,我的所有函数都会被打开,因此恶意用户可以看到所有服务器端PHP脚本名称和所需参数,从而提供更多的攻击方式。

PHP代码在服务器上处理,因此所有人都会看到该PHP的输出是否正确。所以你的PHP代码仍然是隐藏的


如果您在HTML输出中看到PHP代码,则可能是服务器配置不正确,或者是语法错误,这与您希望解析器处理的内容不符。

使用index.PHP是可以的,但您确实不希望像这样对JS文件进行PHP包含

最简单的方法是像您刚才那样包含JS文件

<script src="myfunctions.js" />
理想情况下,您需要将函数作为对象或模块的一部分


另一种方法是函数4查询服务器上的用户id,然后以某种方式缓存它。

注意不要引入漏洞。如果
$\u conf['user\u id']
是一个整数,那么您应该可以,但要小心这样混合客户端和服务器端脚本@保罗的评论是正确的


有关更多提示,请参见此处

不要将数据和脚本混用。如果您
编写了超过2500行的Javascirpt
,看起来您已经在这样做了。将数据转换为JSON(PHP),然后在数据上应用JavaScript。我不确定我是否理解这里的关注点或问题。无论您做什么,客户端都可以查看JavaScript文件。@Paul S.不,这些不是数据,所有这些都是请求不同PHP脚本并显示输出的函数。不,我没有看到PHP代码,我只是用所有包含的js函数获得了更大的输出页面。如果您不想一次加载所有这些函数,这并不一定是一件坏事,因为您可以缓存该文件以提高性能,您可以让PHP脚本接收任何给定页面要包含哪些函数的参数,并只输出这些参数。