【问题标题】:Using a PHP as a Javascript file - Security?使用 PHP 作为 Javascript 文件 - 安全性?
【发布时间】:2009-09-14 09:21:24
【问题描述】:

在 javascript 包含中使用 php 文件而不是 .js 文件有什么问题;

<script type='text/javascript' src='myjavascript.php'></script> 

很明显,我将检查并插入寄存器全局问题等,但是是否还有其他可能由此产生的漏洞?考虑到 100,000+ 人将查看使用此脚本的页面。

【问题讨论】:

    标签: javascript security code-injection


    【解决方案1】:

    不,服务器会像解析任何其他 PHP 文件一样解析它。

    该文件将通过 HTTP 请求检索,与任何其他网页完全相同。 如果您将其包含在&lt;script&gt; 中,它将通过 GET 请求进行检索,但这并不能阻止好奇的用户向其发布信息。您需要使用与任何其他 PHP 脚本相同的预防措施 - 不多也不少。

    就浏览器而言,它只是 javascript - 它不知道它是由 PHP 生成的,因此无需考虑额外的内容。

    只要您不留下将 javascript 注入文件的方法,就可以了。请确保不要信任输入和转义输出。

    【讨论】:

    • 我已经在一个项目中做过了,根据用户自定义JS很方便。
    • 我知道它会被解析(我目前正在使用它),但我只是想知道除了基本的寄存器全局/注入之外,是否还有其他需要插入的东西?跨度>
    【解决方案2】:

    还有其他可能由此引发的漏洞吗?

    在 PHP 本身中,将值输出到 JavaScript 需要与输出到 HTML 不同的编码方案。如果你没有做对,你就会面临与在生成 HTML 的 PHP 中没有使用 htmlspecialchars() 相同的跨站点脚本问题:

    var name= '<?= $name ?>';
    
    <?php
        echo "var name='$name';"
    ?>
    

    如果您的名称包含撇号或反斜杠,这两种方法都会给您带来麻烦。这是addslashes() 可以一次性成为正确选择的少数几个地方之一!

    您还应该注意,JavaScript 文件可以包含在另一个域上的

    <script src="http://www.targetsite.com/script.php" type="text/javascript"></script>
    <script type="text/javascript">
        alert('Ha ha, I know you are logged in to targetsite.com as user '+name);
    </script>
    

    最后,您将不得不处理缓存。如果您的数据是高度动态的,您需要在脚本响应中设置 no-cache 标头,这样浏览器就不会缓存它。另一方面,对于更改频率较低的数据,您希望处理过期、etag 和 if-modified-since/not-modified 标头,以便浏览器可以更有效地缓存;您不希望有 100,000 人一次又一次地获取脚本,从而导致服务器负载,如果您能提供帮助的话。

    正确处理缓存可能会很痛苦,当你弄错时会产生奇怪的结果。

    这就是为什么 PHP 模板化到 JavaScript 通常不受欢迎的原因。对于大部分脚本是静态的并且您必须添加的数据量很小的典型用法,通常最好将该数据模板化到 HTML 中,或者在关联元素的属性中,或者通过将其隐藏在注释中可以从 DOM 中读取,或者通过包含内联

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2012-06-05
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 2013-05-20
      相关资源
      最近更新 更多