如何在HTML中显示源文件.php?

14
我有以下PHP脚本(file.php),它显示当前时间并显示用户的输入:

我有以下PHP脚本(file.php),它显示当前时间并显示用户的输入:

Current time:

<?php

$time=time();
$actual_time=date('H:i:s',$time);
echo $actual_time;

//show user input
$enter=@$_POST['enter'];
echo '<br>Input: '.$enter;

?>

<form action="" method="POST">
    <input type="text" name="enter">
    <input type="submit" value="Refresh">
</form>

默认情况下,页面会显示以下内容:default

如果我输入例如test,我会看到以下内容:enter_htmlcode1

如果我输入<iframe src="file.php"></iframe>,我可以在较小的窗口中重新加载页面:enter_htmlcode2

那么,现在,我如何通过提交某些特定的HTML代码在输入文本字段中来显示原始PHP脚本(file.php)?


3
highlight_file() 函数用于将指定文件的代码以 HTML 格式高亮显示。 - Mark Baker
1
iframe 不是你的答案。 - Krii
2
除非你打印输出并认识到 file.php 应该是一个包含文件名的字符串,否则你看不到任何东西:<?php echo highlight_file('file.php'); ?>...... 这就是阅读文档的好处所在。 - Mark Baker
1
你想要达到什么目的?如果你想攻击这个网站 - 不,你不能通过这些源代码实现这一点 - 最多只能是XSS。如果你试图出于合法原因显示源代码 - 你必须更改代码并使用例如 <?php echo highlight_file('file.php'); ?> - Gennadiy Litvinyuk
3
@Andy,这是不安全性的一个非常简单的定义。一些网站有公开的源代码 - 但是它们是安全的。许多网站使用开源软件 - 例如WordPress,维基百科或Stackoverflow并且仍然是安全的。你的源代码存在XSS漏洞 - 这是网络上十大漏洞之一。它不允许揭示你的源代码,但可能会泄露其他一些信息。更多信息请参见OWASP跨站脚本攻击 - Gennadiy Litvinyuk
显示剩余7条评论
6个回答

10
<?php

// Disable a WebKit security feature
// which would prevent from showing the source code.
header('X-XSS-Protection: 0');

if (isset($_GET['source']) || isset($_POST['source'])) {
        $source = file_get_contents(__FILE__);

        // To prevent this control from showing up
        // in the output source code
        // enable the code below.
        /*
        $lines_to_remove = 26;
        $source = explode("\n", $source, $lines_to_remove);
        $source = $source[$lines_to_remove - 1];
        */

        $source = highlight_string($source, true);
        echo $source;

        return;
}

?>
Current time:

<?php


$time=time();
$actual_time=date('H:i:s',$time);
echo $actual_time;

//show user input
$enter=@$_POST['enter'];
echo '<br>Input: '.$enter;

?>

<form action="" method="POST">
    <input type="text" name="enter">
    <input type="submit" value="Refresh">
</form>

在此输入图片描述


1
为了完整起见:输入必须是<iframe src="file.php?source"></iframe> - Andy

3

首要的

htmlspecialchars — Convert special characters to HTML entities

$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new;

//This would be the output
&lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;

//browser will display
<a href='test'>Test</a>

Second

htmlentities -Convert all applicable characters to HTML entities

$str = "A 'quote' is <b>bold</b>";

echo htmlentities($str);

// Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;

echo htmlentities($str, ENT_QUOTES);
// Outputs: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;

In browser it woulbe displayed:

A 'quote' is <b>bold</b>

2
提交HTML或PHP代码以进行显示:
<?php

$time=time();
$actual_time=date('H:i:s',$time);
echo $actual_time;

//show user input
$enter=@$_POST['enter'];
echo '<br>Input: <pre>'.htmlspecialchars($enter).'</pre>';

?>

<form action="test.php" method="POST">
    <input type="text" name="enter">
    <input type="submit" value="Refresh">
</form>

打开文件并显示:

<?php
    $myfile = fopen("test.php", "r") or die("Unable to open file!");
    echo '<pre>'.htmlspecialchars(fread($myfile,filesize("test.php"))).'</pre>';
    fclose($myfile);
?>

2
将输入解析为纯文本应该显示文件:
<?php

$time=time();
$actual_time=date('H:i:s',$time);
echo $actual_time;

//show user input
$enter=@$_POST['enter'];

header("Content-Type: text/plain");

echo '<br>Input: '.$enter;

?>

当然,您随后需要自定义脚本以检测用户何时要显示文件,然后仅在此时更改内容类型(否则其他HTML输入将无法工作)。

好的,它能工作...但我实际上希望在不修改文件的情况下显示它。 - Andy
修改哪个文件?你是在说 file.php 吗?因为除非脚本本身就是 file.php,否则你不会修改它。 - Krii
是的,我指的是文件 file.php。我的意图是提供一个输入,然后在屏幕上返回该文件。 - Andy
@Andy想要使用一个漏洞来查看文件,是吗? - Herbert Van-Vliet

1

文件名:test1.php

请在此文件中编写以下代码:

<?php
$time=time();
$actual_time=date('H:i:s',$time): ;
echo $actual_time;

$enter=@$_POST['enter'];
if (isset($enter)) {
    $doc = new DOMDocument();
    @$doc->loadHTML($enter);
    $tags = $doc->getElementsByTagName('iframe');
    foreach ($tags as $tag) {
           $file_name = $tag->getAttribute('src');
    }
    if(isset($file_name)){
        $result ='<iframe src='.$file_name.'></iframe>';        
    }else{
        $result = $enter;   
    }
}
echo '<br>Input: '.$result;
?>
<form action="" method="POST">
    <input type="text" name="enter">
    <input type="submit" value="Refresh">
</form>

创建一个新文件:test6.php 在此文件中编写以下代码:
<?php
    $myfile = fopen("test1.php", "r") or die("Unable to open file!");
    echo '<pre>'.htmlspecialchars(fread($myfile,filesize("test1.php"))).'</pre>';
    fclose($myfile);
?>

点击文件:test1.php

在输入标签中写入:<iframe src="test6.php"></iframe>

它会工作的!


0

我不完全理解你想要实现什么,但是我认为 highlight_file() 函数可能会有所帮助。

echo highlight_file('file.php',true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接