2013-10-23 62 views
0

有人能帮我理解为什么这不起作用吗?PHP和Javascript:使用Javascript变量获取文件内容

var uname = "<?php echo strtolower($_GET['un']) ?>"; 
var source = "<?php echo file_get_contents('accounts/"+uname+"') ?>"; 
console.log(source); 

我一直在尝试一段时间才能得到这个工作,它似乎并没有。在我添加源变量之前,它工作正常,并在页面上显示un变量。

谢谢。

回答

2

您可以设置UNAME作为一个javascript变量,然后尝试用PHP读取它。

var source = "<?php echo file_get_contents('accounts/'.strtolower($_GET['un'])) ?>"; 
console.log(source); 

我必须说,这对于公共用法是不安全的。

+0

这不是真的对公众而言,只是我和我的朋友。 ;] – celliott1997

+0

我强烈建议检查文件夹中是否存在该文件,使用'../'进行遍历可以在服务器上显示您的密码或其他敏感文件内容。 –

+0

如果不清楚,戴夫陈的意思是,任何人都可以读取磁盘上的任何内容,而不仅仅是在帐户文件夹中(取决于文件权限)。 –

-3

试试这个:

<?php $uname = strtolower($_GET['un']); ?> 
var source = "<?php echo file_get_contents('accounts/'.$uname) ?>"; 
4

您正在混合客户端和服务器端技术...... + uname +在PHP命令中看起来像一个JavaScript变量...... JavaScript变量在呈现页面之前不可用。

的Try ...

var source = "<?php echo file_get_contents('accounts/'. $_GET['un']) ?>"; 
+3

这是广泛的攻击......它给攻击者的手段读取您的网络服务器上的任何文件。 – Gavin

0

我只是想指出的是,你不需要PHP来访问你的查询字符串变量,因为一些已经提到的,你在这里混技术。另外请注意,您的问题示例存在安全问题,我敢肯定这些问题会持续存在,因为您需要在您调用的脚本中清理输入内容。

您的完整示例可以在JavaScript中完成。我将使用jQuery进行ajax调用(您可以忽略它,并显然自己处理ajax调用 - 我只是懒惰;-))和用于查询字符串检索的MDN snippte

// populate a variable with your query string (window.location.search) - courtesy of MDN 
var oGetVars = new (function (sSearch) { 
    var rNull = /^\s*$/, rBool = /^(true|false)$/i; 
    function buildValue(sValue) { 
    if (rNull.test(sValue)) { return null; } 
    if (rBool.test(sValue)) { return sValue.toLowerCase() === "true"; } 
    if (isFinite(sValue)) { return parseFloat(sValue); } 
    if (isFinite(Date.parse(sValue))) { return new Date(sValue); } 
    return sValue; 
    } 
    if (sSearch.length > 1) { 
    for (var aItKey, nKeyId = 0, aCouples = sSearch.substr(1).split("&"); nKeyId < aCouples.length; nKeyId++) { 
     aItKey = aCouples[nKeyId].split("="); 
     this[unescape(aItKey[0])] = aItKey.length > 1 ? buildValue(unescape(aItKey[1])) : null; 
    } 
    } 
})(window.location.search); 

// with jQuery 
$.ajax({ 
    url: "accounts/" + oGetVars.un, 
    success: function(data, textStatus, jqXHR) { 
     console.log(data); 
    } 
}); 

// plain javascript 
var xhr = new XMLHttpRequest(); 
xhr.open("GET", "accounts/" + oGetVars.un, true); 
xhr.onreadystatechange = function() { 
    if(http.readyState == 4 && http.status == 200) { 
     console.log(this.responseText); 
    } 
}; 
xhr.send(); 

用普通的javascript XMLHttpRequest调用更新示例。

+0

我实际上并没有在我的网站上使用jQuery,但现在我添加了它。 – celliott1997