2012-04-02 127 views
0

我已使用cURL解决方案来解决XSS,但存在问题。 我proxy.php文件的内容是: -未执行PHP脚本

<?php 
    $url = "http://www.yahoo.com"; 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $file_contents = curl_exec($ch); 
    curl_close($ch); 
    echo $file_contents; 
?> 

而且我这是如何试图执行PHP脚本

$("#tempButton").click(function(){ 
    $("#pageContent").load('http://localhost:8080/proof/proxy.php',function() { 
     var t = $("#pageContent").html(); 
     alert(t); 
    }); 
}); 

但变量t显示proxy.php文件的内容,但它是预计将显示在proxy.php文件中设置的yahoo.com的内容。我在做些愚蠢的事情吗? #FirstTimePHP

+0

将http:// localhost:8080 /从http:// localhost:8080/proof/proxy.php中删除,它应该只是'/proof/proxy.php'。此外,检查萤火虫和/或铬检查器的错误细节。 – jpic 2012-04-02 11:01:03

+0

尝试直接访问您的页面(只需浏览到proxy.php),或使用Firebug的Net标签(或任何等效工具)检查请求的输出 – TJHeuvel 2012-04-02 11:01:06

+2

您可能没有在您的Web服务器中注册PHP。如果是这样,当从网络访问它时,你永远不应该看到''标签内的php文件的_content_。 – 2012-04-02 11:01:07

回答

1

由于变量t显示文件的内容,所以服务器软件一定不能将它识别为PHP。

有几个原因可能会发生。没有开放标签将是1,但你当然有这些。

另一个潜在的原因是php并未作为服务器软件中的模块加载。

另一个潜在的原因是服务器不能解析带有php扩展名的文件(这是可配置的)。

你应该从基础开始。忽略javascript,而是手动调用url并查看你得到的。有可能你会看到代码。

如果确实发生这种情况,请确保服务器软件(通常为apache)设置为识别php与php模块关联的扩展名。最后确保PHP实际上已正确安装。

+0

谢谢彼得和Joachimlasksson ..你的答案是有道理的,是有帮助的。其实我的服务器不识别PHP文件,我正在处理它。 – 2012-04-02 11:11:15

1

让你的proxy.php像这样。

<?php 
     if(in_array('curl', get_loaded_extensions())) { 
       $url = "http://www.yahoo.com"; 
       $ch = curl_init(); 
       $timeout = 5; 
       curl_setopt ($ch, CURLOPT_URL, $url); 
       curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
       curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
       $file_contents = curl_exec($ch); 
       curl_close($ch); 
       echo $file_contents; 
       } 
     else { 
     echo 'No cUrl here'; 
     } 
?> 
+1

虽然这是一个很好的做法,但这并不能解决问题。正如问题中所述,php脚本的代码正在输出。检查是否安装了curl意味着会输出更多的代码。 – Peter 2012-04-02 11:30:20

+0

我想我们不能检查类似is_php_intalled()! – niksmac 2012-04-02 13:24:47