代码之家  ›  专栏  ›  技术社区  ›  max

php安全中的Require_one和fopen

  •  0
  • max  · 技术社区  · 13 年前

    我有一个用PHP实现的文件。 我得到的错误是

    警告:第13行/Applications/MAMP/htdocs/opencart/catalog/view/theme/default/template/passion/bank_transfer.tpl中的allow_url_include=0禁用了服务器配置中的require_one():http://wrapper警告:

    问题:

    1. 我知道我需要通过在php.ini中允许allow_url_include=0来解决这个问题。我正在使用MAMP,我已经搜索了MAMP和MAMP Pro中的所有文件夹,但我没有找到任何一行,我可以在那里将该值设置为0。 我要加这行吗?

    2. 我读过 LINK 我担心使用require_one、fopen和绝对URL会出现一些安全问题。使用绝对URL和require_one是否存在安全问题?

    3. 如何指定文档的URL?目前是 www.example.com/opencart/admin/kzm/kzm.utils.php ,我尝试使用相对URL /opencart/admin/kzm/kzm.utils.php ,但我没有找到文件。我做得对吗?

    银行转账tpl:

    <h2><?php echo $text_instruction; ?></h2>
        <div class="content">
              <p><?php echo $text_description; ?></p>
              <p><?php echo $bank; ?></p>
              <p><?php echo $text_payment; ?></p>
              <p><?php echo $orderIdKZM; ?></p>
              <p>
              <?php 
                echo $amountKZM; 
                $titleKZM = $titleKZM.$orderIdKZM; 
                echo '<br>';
    
                require_once('http://example.com/opencart/admin/kzm/kzm.utils.php');
                echo $titleKZM;
                echo '<br>';
    
                $merchantIdKZM = '10';
                $currencyKZM = 'KZT';
                $successUrlKZM = 'http://localhost:8888/opencart/admin/kzm/kzm_pay.php';
                $erroUrlKZM = 'http://www.google.com';
    
                $dateKZM = " ";
                $signstrKZM = " ";
                $verKZM = " ";
                echo $merchantIdKZM.'-'.$currencyKZM.'-'.$successUrlKZM.'-'.$erroUrlKZM.'-'.$dateKZM;
    
              ?></p>
        </div>
        <div class="buttons">
          <div class="right">
                <form action="/opencart/testkzm.php" method="get">
                    <input type="hidden" name="merchantIdKZM" value="<?php echo $merchantIdKZM; ?>">
                    <input type="hidden" name="orderIdKZM" value="<?php echo $orderIdKZM; ?>">
                    <input type="hidden" name="amountKZM" value="<?php echo $amountKZM; ?>">
                    <input type="hidden" name="currencyKZM" value="<?php echo $currencyKZM; ?>">
                    <input type="hidden" name="successUrlKZM" value="<?php echo $successUrlKZM; ?>">
                    <input type="hidden" name="errorUrlKZM" value="<?php echo $errorUrlKZM; ?>">
                    <input type="hidden" name="signstrKZM" value="<?php echo $signstrKZM; ?>">
                    <input type="hidden" name="verKZM"  value="<?php echo $verKZM; ?>">
    
                    <input type="submit" value="<?php echo $button_confirm; ?>" id="button-confirm" class="button" />
                </form>
            </div>
        </div>
    
    3 回复  |  直到 9 年前
        1
  •  2
  •   AbsoluteƵERØ    13 年前

    更改allow_url_include=1是不安全的。 默认情况下,它被设置为禁用。

    当我在本地机器上包含一些东西时,我总是使用这样的东西,这样它就可以跨平台移植。如果您使用共享托管计划或不控制服务器,则在web根目录下硬编码include可能会导致强制重写。此外,这对于开发/生产环境来说更具可移植性。

    <?php
    
        require_once($_SERVER['DOCUMENT_ROOT'].'/opencart/admin/kzm/kzm.utils.php');
    
    ?>
    

    如果您需要访问另一个目录,您可以随时执行以下操作:

    <?php
    
        require_once($_SERVER['DOCUMENT_ROOT'].'/../website2_folder/opencart/admin/kzm/kzm.utils.php');
    
    ?>
    
        2
  •  1
  •   barbashov    13 年前

    您应该给出相对于文件系统的require_one()路径,而不是站点URL。

    例如,您有网站 http://example.com 和位于中的此网站的脚本 /Applications/MAMP/htdocs/ 目录所以,你应该使用 require_once("/Applications/MAMP/htdocs/opencart/admin/kzm/kzm.utils.php"); 而不是 require_once('http://example.com/opencart/admin/kzm/kzm.utils.php'); .

    在这种情况下不需要修改配置。

        3
  •  1
  •   Tisp    13 年前

    我不知道的1个和2个问题

    3) 如果您需要的php代码是您的当前目录,请尝试以下操作:

    require_once("kzm.utils.php");
    

    如果没有,请使用完整路径 例子:

    require_one(“/var/www/opencart/kzm.utils.php);

    推荐文章