Javascript 如何知道是否正在src=";内调用php文件&引用;?
在我的网站上我有Javascript 如何知道是否正在src=";内调用php文件&引用;?,javascript,php,src,Javascript,Php,Src,在我的网站上我有 <script src="js.php"></script> 问题很简单,但我不知道答案: 在js.php中,如何检查文件是否已通过脚本src=“…”调用 其目的是根据调用此php脚本文件的方式(直接访问或脚本src=“…”)更改返回的js.php HTML代码。方法是在调用js.php文件之前将会话变量赋值为true session_start(); $_SESSION['src'] = true; <script src="js.php"
<script src="js.php"></script>
问题很简单,但我不知道答案:
在js.php中,如何检查文件是否已通过脚本src=“…”调用
其目的是根据调用此php脚本文件的方式(直接访问或脚本src=“…”)更改返回的js.php HTML代码。方法是在调用js.php文件之前将会话变量赋值为true
session_start();
$_SESSION['src'] = true;
<script src="js.php"></script>
很酷的问题。让我来帮你 我将在这里提供一些非100%可靠的方法,这些方法将在标准的非用户恶意案例中工作 弗斯特 对于此解决方案,您需要从下载mimeparser。您可以选择要使用哪种MIME解析器,我发现这只是为了回答这个问题 理论 理论上,浏览器正在发送头,响应期间脚本应该匹配头,以便进行适当的浏览器端解析。特别是在这里,我想到了
HTTP\u ACCEPT
header
代码示例
下载mimeparser后,让我们开始创建文件test.php
:
<?php // test.php
//https://code.google.com/p/mimeparse/
include_once('mimeparse.php');
$mimeMatch = Mimeparse::best_match(array('text/javascript', 'text/css', 'text/html', 'application/xhtml+xml', 'application/xml', 'image/*'), $_SERVER['HTTP_ACCEPT']);
switch($mimeMatch) {
case 'text/javascript': // via <script src>
echo('alert("this is loaded as script");');
break;
case 'image/*': // via <image src>
header('Location: http://i.stack.imgur.com/sOq8x.jpg?s=128&g=1');
break;
case 'text/css': // via <link href>
echo('body::before{content: "this is written via CSS"}');
break;
default:
var_dump('detected standard file request by matching to ' . $mimeMatch);
// if __FILE__ is first on a list, its not included
if(__FILE__ !== array_shift(get_included_files())) {
var_dump('file was included or required');
} else {
var_dump('file runs on its own');
}
// additional detect for ajax request.
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
var_dump('loaded via AJAX request');
} else {
var_dump('loaded via not-AJAX request');
}
break;
}
die();
<html>
<head>
<link rel="stylesheet" type="text/css" href="test.php"/>
</head>
<body>
<script src="test.php"></script>
<img src="test.php"></img>
<?php require('test.php'); ?>
包含-功能决战
为了了解脚本在某些特殊情况下的情况,您可以创建一个示例index.php
:
<?php // test.php
//https://code.google.com/p/mimeparse/
include_once('mimeparse.php');
$mimeMatch = Mimeparse::best_match(array('text/javascript', 'text/css', 'text/html', 'application/xhtml+xml', 'application/xml', 'image/*'), $_SERVER['HTTP_ACCEPT']);
switch($mimeMatch) {
case 'text/javascript': // via <script src>
echo('alert("this is loaded as script");');
break;
case 'image/*': // via <image src>
header('Location: http://i.stack.imgur.com/sOq8x.jpg?s=128&g=1');
break;
case 'text/css': // via <link href>
echo('body::before{content: "this is written via CSS"}');
break;
default:
var_dump('detected standard file request by matching to ' . $mimeMatch);
// if __FILE__ is first on a list, its not included
if(__FILE__ !== array_shift(get_included_files())) {
var_dump('file was included or required');
} else {
var_dump('file runs on its own');
}
// additional detect for ajax request.
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
var_dump('loaded via AJAX request');
} else {
var_dump('loaded via not-AJAX request');
}
break;
}
die();
<html>
<head>
<link rel="stylesheet" type="text/css" href="test.php"/>
</head>
<body>
<script src="test.php"></script>
<img src="test.php"></img>
<?php require('test.php'); ?>
描述
通过解析从浏览器发送的一些标准行为头,我们可以粗略地预测页面加载的上下文。它不是100%可靠的,也不是一个很好的实践,但对于编写rootkit来说却非常好(;)不管怎样
希望rest在PHP代码中被注释掉
使用Apache服务和Chrome阅读进行测试。不应习惯使用
=
比较。它在这里不起作用,因为true
将是一个字符串。使用“true”
。对,@mario my bad。这不符合要求:任何人都可以直接访问http://.../js.php?src=true 在浏览器导航栏中,愚弄系统,使其相信我们是通过脚本src=“…”inclusion调用的。@user2824618我想到了另一种方法,让我编辑我的答案。检查获取包含的文件()
怎么样?这应该是假装的安全功能吗?因为那是行不通的。您可以区分HTTP(“direct”)请求和来自不同调用脚本的PHP包含。但是没有可靠的方法来确定HTML链接的来源,或者区分include/require/_once等。是的,这与安全性有关。这必须对用户黑客具有弹性,例如,这不是任何人都可以直接访问的解决方案http://.../js.php?callMethod=src 在浏览器导航栏中,愚弄系统,使其相信我们正在通过脚本src=“…”包含进行调用。任何想从浏览器缓存中读取脚本的人都可以。