0

最初我有以下结构:

index.html文件:

...
<script src="myfunctions.js" />
...

myfunctions.js文件:

...
function one() {
....
}
function two() {
....
}
function three() {
....
}

这样,我编写了超过 2 500 行 Javascirpt,但随后我不得不将 PHP 变量添加到函数中,因此我不得不将index.html重命名为index.php,将myfunctions.js重命名为myfunctions.js.php并执行以下操作变化:

index.php文件:

...
<?php
    include("myfunctions.js.php");
?>
...

myfunctions.js.php文件:

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

我已经实现了在 JavaScript 中使用 PHP 变量的目的,但我注意到浏览器中的网页开始显示所有包含的函数,即,如果在第一种情况下,当我使用调试工具查看页面或保存时磁盘上的那个页面我只看到 index.html 中包含一些小的 JavaScript 代码,但现在查看或保存 index.php 文件我看到 myfunctions.js.php 中的所有函数都可见。当然可见内容没有改变,但实际输出增加了 2 500 行。那会是一个安全问题吗?我应该避免这种在 JavaScript 中显示 PHP 变量的方式,还是我不应该关心它并让它保持原样?

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

4

3 回答 3

2

PHP 代码在服务器上进行处理,因此任何人都可以查看该 PHP 的输出。所以你的 PHP 代码仍然是隐藏的。

如果您在 HTML 输出中看到 PHP 代码,则说明您的服务器配置不正确,或者您有语法错误,它回显了您打算让解析器处理的内容。

于 2013-11-12T21:45:55.150 回答
0

使用 index.php 很好,但您并不想像这样对 JS 文件进行 PHP 包含。

最简单的方法是像你做的那样包含 JS 文件

<script src="myfunctions.js" />

然后在输出 user_id 的 PHP 文件中添加少量 Javascript。

function userId() {
    return <?php echo $_conf['user_id'];?>
}

然后函数四可以像访问它一样

function four() {
    console.log(userId());
}

理想情况下,您希望您的函数作为对象或模块的一部分。

另一种方法是让函数四向服务器查询 user_id,然后以某种方式缓存它。

于 2013-11-12T23:41:29.407 回答
0

小心你没有引入XSS漏洞。如果$_conf['user_id']是一个整数,那么你应该没问题,但要小心混合客户端和服务器端脚本这样。@Paul S 的评论是要走的路。

有关更多提示,请参见此处https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

于 2013-11-13T12:43:54.423 回答