- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是新来的,我有一个 PHP Coder 来修改我的 2 个文件,这些文件应该能够让用户能够直接链接到在 http://NFOPic.com 上从 DOC 转换为 IMG 的文件。
这里是编辑过的代码(你可以用'DrTech76'看到编辑过的部分)-:
获取图像.php
<?php
require_once 'include/db.php';
$file_name = $_GET['f'];
if ( empty( $file_name ) || !file_exists( 'uploads/' . $file_name ))
{
die( 'File not found...' );
}
$sql = "SELECT original_file_name FROM nfo_images WHERE file_name = '" . $file_name . "'";
$rs = mysql_query( $sql );
$file = mysql_fetch_assoc( $rs );
$original_file_name = explode( '.', $file['original_file_name'] );
//just get rid of the last, then put back together
array_pop( $original_file_name );
$original_file_name = implode( '.', $original_file_name );
header("Content-Type: image/png");
//start edit 10.07.2014 DrTech76, flow the direct image link through here to keep the actuall location unknown
if(!isset($_REQUEST["dl"]))
{//it's not a request through a direct link, so process as file download, as it was originally
header("Content-Disposition: attachment; filename=\"" . $original_file_name . ".png\"");
}
//end edit 10.07.2014 DrTech76, flow the direct image link through here to keep the actuall location unknown
echo file_get_contents( 'uploads/' . $file_name );
?>
另一个编辑的文件是 index.php(添加的输入区域,应该是文本区域 IMO,带有“选择复制”以将内容复制到剪贴板)(这只是我添加的编辑区域,否则会太长)
<div id="uploaded_image_div" align="center">
<b>Left Click on the Below Image to Save it to your PC...</b><br /><br />
<div id="title" style="font-weight:bold;"></div>
<br />
<a href="" target="_blank"><img border="0" src="" /></a>
<br />
<?php
//start edit 10.07.2014 DrTech76, direct link containers, styling is done through css/style.css
?>
<div id="direct_link">
<label for="link">Direct link to this image</label><br />
<input id="link" readonly onfocus="$(this).select()" />
</div>
<?php
//end edit 10.07.2014 DrTech76, direct link containers, styling is done through css/style.css
?>
<br />
<br />
谁能帮我解决这个错误,正如您从 NFOPic.com 索引页面中看到的那样,实际的域名没有显示 - 虽然我需要它,所以如果我将它上传到另一个域(一个新的BETA 发布时选择的域)它将适用于任何域,而不仅仅是放置 http://nfopic.com/在代码前面 - 提前谢谢大家!
最佳答案
所以,这个脚本有很多事情要做。
1) 摆脱XSS和SQL注入(inject)漏洞:
现在,您正在检查文件是否存在,这并非完全错误,但并不能为您完成工作:
$file_name = $_GET['f'];
if ( empty( $file_name ) || !file_exists( 'uploads/' . $file_name ))
{
die( 'File not found...' );
}
既然 Peter 已经告诉过您,您允许人们通过插入 http://nfopic.com/get_image.php?f=../include/db.php 来下载您的 SQL Server 访问数据。进入浏览器,我假设你理解了基本问题。file_exists
只是检查文件在服务器上是否可用,这对于您的 include/db.php
文件是正确的。所以解释器跳过 IF 并继续执行。由于您已经在使用数据库,我们将使用它来确定文件是否确实存在。我们将在几秒钟内完成。
mysql_query
根本不安全(SQL 注入(inject))!您必须使用 PDO 或 MySQLi 进行 SQL 查询(我使用 PDO 进行演示):
$prep = $db->prepare("SELECT original_file_name FROM nfo_images WHERE file_name = ?");
$prep->execute(array($file_name));
$res = $prep->fetchAll();
if(count($res) == 0){
die( 'File not found...' );
}
$original_file_name = explode('.', $res[0]["original_file_name"]);
// ... and what else you want to do with the file name
您可以在这里阅读更多相关信息:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers
现在我们应该通过这种方式关闭这两个漏洞(假设上传不允许错误地与数据库交互 -> 你需要检查 generate_image.php
)。
2) 添加域的问题:
我不太明白你的问题是什么,所以如果我没有回答正确的方式,请随时发表评论并提出更多问题。
- 您可以通过调用 $_SERVER['SERVER_NAME']
获取当前域。这应该输出如下内容:nfopic.com(不过我不知道您想将其添加到何处)。
- 如果您的意思是 input
字段中的域名是错误的,您可以在 js/nfo.js
中更改它文件。有一行:
$('#uploaded_image_div #link').val('http://nfopic.com/get_image.php?f=' + validate[1]);
http://nfopic.com/get_image.php?f=
部分是硬编码的,因此您必须以任何其他方式插入它。
- 如果您打算将域名添加到用户可以下载的图像名称中,您必须使用 .htaccess
文件重定向您的图像,因此你可以请求真实的图像名称image_234234.png
。
3) 主页的其余部分:
既然网站这部分有这么多漏洞和错误,那么generate_image.php
中肯定有一些。文件类型(txt、nfo 和 diz)的检查是在 JS 中完成的。这样做的问题是,如果 PHP 中也没有一些检查,您可以绕过它们并上传任何其他文件类型。这将我们引向另一个漏洞 -> 可以上传 SHELL 脚本(简单的 PHP 文件)并且您的文件可以被攻击者修改。
最后:整个主页可能不安全。肯定有一些修改需要完成。再说一遍,如果我没有回答您的起始问题,请随时提出更多问题。
关于php - 如何在PHP代码中的file_get_contents前面添加域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25868037/
我是一名优秀的程序员,十分优秀!