浏览器如何允许下载 php 文件而 wget 不允许? [MediaWiki 安装]
How does the browser allow downloading the php file while wget doesn't? [MediaWiki installation]
在安装 MediaWiki 的过程中,我不得不下载一个名为 LocalSettings.php
的文件。当我通过点击下载 link(恰好是 http://localhost/mymediawiki/mw-config/index.php?localsettings=1
)来下载它时,它会下载一个 php 文件,但是当我通过 "copy link address" 下载它并使用
$ wget URL -O output
它会下载一个 html 文件。
以下是index.php
的内容:
以下是我用wget
得到的内容:
基本上是提供下载的页面link(也就是http://localhost/mymediawiki/mw-config/index.php?page=Complete
),看来。
以下是我的一些研究:
- https://security.stackexchange.com/questions/98425/is-there-a-way-to-download-a-php-file-without-it-being-executed
- Possible to view PHP code of a website?
- Is it possible to download PHP script from a web page with wget?
但我不明白点击 "download the file" link 是如何下载 php 文件的。这让我想知道一定有一种方法可以使用 bash 命令(例如 wget
或 curl
.
下载 php 文件
请告诉我浏览器是如何执行此操作的,以及通过终端执行此操作的任何其他方式。
你的浏览器有cookies,wget没有,几乎可以肯定是受cookies保护的文件,只有拥有正确(身份验证?)cookies的人才能访问该文件,wget不能。在 chrome 打开开发者控制台,导航到网络选项卡,在 chrome 下载文件,在网络选项卡中找到请求,右键单击该选项卡并按 "copy as curl",然后你''ll see what the request looks like with cookies, it'll look more like:
curl 'https://whosebug.com/posts/validate-body' -H 'cookie: prov=5fad00f3-5ed3-bd3b-3a8a; _ga=GA1.2.20207544.1508821; sgt=id=e366-9d13-4df2-84de-2042; _gid=GA1.2.129666.1538138077; acct=t=Jyl74nJBTyCIYQq5mc2sf&s=StN3CVV2B5Opj051ywy7' -H 'origin: https://whosebug.com' -H 'accept-encoding: gzip, deflate, br' -H 'accept-language: en-US,en;q=0.9' -H 'user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H 'content-type: application/x-www-form-urlencoded; charset=UTF-8' -H 'accept: /' -H 'referer: https://whosebug.com/' -H 'authority: whosebug.com' -H 'x-requested-with: XMLHttpRequest' --data $'body=your+browser+has+cookies%2C+wge&oldBody=&isQuestion=false' --compressed
- 如果您 运行 在 bash 中执行该命令,您可能可以从终端下载文件。
正如您在相关问题中看到的那样,您不能仅通过请求文件来下载 PHP 源代码,至少只要 HTTP 服务器启用了 PHP 扩展。
但这绝不意味着您不能在适当的情况下下载 PHP 脚本。
您可以在服务器中使用一个 PHP 脚本作为代理来绕过 PHP 解析并向您发送服务器中任何 PHP 文件的源代码。它只需要设置一些headers并用一个简单的readfile(filename)
交给你。当然,这通常是在确定你被授权后才做的。
此外,link 的地址并不总是您单击 link 时实际访问的地址。它可能包含覆盖 href
的 onclick
操作,并且它可以动态放置在那里,因此即使您查看 HTML 源代码也不会知道它。
了解 link 实际用途的一个简单方法是在 Firefox 或 Chrome 中按 Ctrl+Shift+C,转到“网络”选项卡,然后单击 link 看看它到底在访问什么。
我打赌它不会像您想象的那样直接访问文件。
在安装 MediaWiki 的过程中,我不得不下载一个名为 LocalSettings.php
的文件。当我通过点击下载 link(恰好是 http://localhost/mymediawiki/mw-config/index.php?localsettings=1
)来下载它时,它会下载一个 php 文件,但是当我通过 "copy link address" 下载它并使用
$ wget URL -O output
它会下载一个 html 文件。
以下是index.php
的内容:
以下是我用wget
得到的内容:
基本上是提供下载的页面link(也就是http://localhost/mymediawiki/mw-config/index.php?page=Complete
),看来。
以下是我的一些研究:
- https://security.stackexchange.com/questions/98425/is-there-a-way-to-download-a-php-file-without-it-being-executed
- Possible to view PHP code of a website?
- Is it possible to download PHP script from a web page with wget?
但我不明白点击 "download the file" link 是如何下载 php 文件的。这让我想知道一定有一种方法可以使用 bash 命令(例如 wget
或 curl
.
请告诉我浏览器是如何执行此操作的,以及通过终端执行此操作的任何其他方式。
你的浏览器有cookies,wget没有,几乎可以肯定是受cookies保护的文件,只有拥有正确(身份验证?)cookies的人才能访问该文件,wget不能。在 chrome 打开开发者控制台,导航到网络选项卡,在 chrome 下载文件,在网络选项卡中找到请求,右键单击该选项卡并按 "copy as curl",然后你''ll see what the request looks like with cookies, it'll look more like:
curl 'https://whosebug.com/posts/validate-body' -H 'cookie: prov=5fad00f3-5ed3-bd3b-3a8a; _ga=GA1.2.20207544.1508821; sgt=id=e366-9d13-4df2-84de-2042; _gid=GA1.2.129666.1538138077; acct=t=Jyl74nJBTyCIYQq5mc2sf&s=StN3CVV2B5Opj051ywy7' -H 'origin: https://whosebug.com' -H 'accept-encoding: gzip, deflate, br' -H 'accept-language: en-US,en;q=0.9' -H 'user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -H 'content-type: application/x-www-form-urlencoded; charset=UTF-8' -H 'accept: /' -H 'referer: https://whosebug.com/' -H 'authority: whosebug.com' -H 'x-requested-with: XMLHttpRequest' --data $'body=your+browser+has+cookies%2C+wge&oldBody=&isQuestion=false' --compressed
- 如果您 运行 在 bash 中执行该命令,您可能可以从终端下载文件。
正如您在相关问题中看到的那样,您不能仅通过请求文件来下载 PHP 源代码,至少只要 HTTP 服务器启用了 PHP 扩展。
但这绝不意味着您不能在适当的情况下下载 PHP 脚本。
您可以在服务器中使用一个 PHP 脚本作为代理来绕过 PHP 解析并向您发送服务器中任何 PHP 文件的源代码。它只需要设置一些headers并用一个简单的readfile(filename)
交给你。当然,这通常是在确定你被授权后才做的。
此外,link 的地址并不总是您单击 link 时实际访问的地址。它可能包含覆盖 href
的 onclick
操作,并且它可以动态放置在那里,因此即使您查看 HTML 源代码也不会知道它。
了解 link 实际用途的一个简单方法是在 Firefox 或 Chrome 中按 Ctrl+Shift+C,转到“网络”选项卡,然后单击 link 看看它到底在访问什么。
我打赌它不会像您想象的那样直接访问文件。