php - 如何在PHP代码中的file_get_contents前面添加域

标签 php html mysql 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/

相关文章:

HTML:替换 <center>

mysql - 是否可以在 php 数组值中插入 sql 查询?

php - 将 Wilson Score Confidence SQL 代码转换为 Codeigniter 事件记录

php - 仅替换 PHP 中的特定事件

php - 如何使用 XPath 和 DOM 替换 php 中的节点/元素?

javascript - 如果选择了特定商店,则当天日期不可用

php - 在php中匹配并访问带有数据库列的字符串

html - 悬停时缩放圆形按钮没有缩放按钮图标

mysql - 无法在 MAMP 上具有 2 列的 MySQL 表上应用 WHERE/AND

php - 我应该如何将我的 mysql 数据库设置为我的 php 文档模板?