在配置文件中存储html的最佳方法

时间:2012-04-26 08:54:37

标签: php quotes

我正在编写自己的下载跟踪器,我希望为用户提供在下载页面上显示自定义消息的功能。我想允许使用html和javascript,因此用户可以编写段落或使用广告代码等。

我将设置存储在配置文件中(不是我知道的最佳方式)

示例:<?php define("WAIT_MESSAGE", "htmlcodehere"); ?>

问题是引号或斜杠搞乱了配置文件,并且不会加载设置页面。我已经研究过添加斜杠试图逃避这些字符,但它只是添加了多个斜杠。

在我的配置文件中存储html内容/ javascript的最佳方法是什么?

编辑:已尝试过几种方法,但每次单击“保存”以更新配置文件时,所有引号都会被转义\“hello \”变为\“hello \”等

5 个答案:

答案 0 :(得分:2)

您应该非常信任您的用户,让他们发布并在您的网站上保存JavaScript和HTML。

答案 1 :(得分:0)

您是否尝试过使用单曲'?

<?php define('WAIT_MESSAGE', '<p>Please wait.. your download starts shortly</p>'); ?>

答案 2 :(得分:0)

这根本不安全。有人可以很容易地将PHP注入其中。

你可以做什么(有点hacky),是base64_encode()数据,base64_decode()当你需要使用它时。这样做会消除引号/特殊字符问题以及安全问题。

一旦你在配置文件中编写了base64_encoded HTML,就可以使用它,你会这样做:

<?php
    echo base64_decode(WAIT_MESSAGE);
?>

答案 3 :(得分:0)

允许用户将HTML / Javascript / PHP实际插入到您的页面中是一件非常糟糕的事情

说完这一切之后,问题就是困扰我们所有人的问题。您需要的是以某种格式存储HTML代码,这些格式不会改变上述代码的含义。

此问题通常通过将任何此类字符转换为其等效的HTML实体来解决,以便您可以安全地存储

请查看http://php.net/manual/en/function.htmlspecialchars.phphttp://www.php.net/manual/en/function.htmlspecialchars-decode.php了解详情。

答案 4 :(得分:0)

就个人而言,我会在数据库中保存任何可编辑的值,以确保安全, 但如果你真的想要/需要编辑一个php配置文件,那么也许这是最安全的方式。

<?php 
/*Function to check if magic_quotes is enabled.
 (Stops double slashes happening)
*/
function check_magic_quotes($value){
    if (get_magic_quotes_gpc()) {
        return stripslashes($value);
    } else {
        return $value;
    }
}

/*Form was posted, 
You should also do a check to see if logged in and have rights to edit*/
if($_SERVER['REQUEST_METHOD']=='POST'){
    //Check for magic quotes and then base64_encode the string.
    $value = base64_encode(check_magic_quotes($_POST['configVal']));

    /*Use heredoc to create the php line for the config & insert the
      base64 encoded string into place*/
$config=<<<CONFIG
    <?php define("WAIT_MESSAGE", '$value'); ?>
CONFIG;

    file_put_contents('someConfig.php',$config);
}


//When you want to include the config
include('someConfig.php');

/*To echo out the config value: base64_decode it,
  and then htmlentities encode it, to protect from XSS*/
echo 'This was included: '.htmlentities(base64_decode(WAIT_MESSAGE));


//Basic form with current value when someConfg.php has not been included
$config = file_get_contents('someConfig.php');
preg_match("#\"WAIT_MESSAGE\", '(.*?)'#",$config,$match);
 ?>

<form method="POST" action="">
  <p>Config Value:<input type="text" name="configVal" value="<?php echo htmlentities(base64_decode($match[1]));?>" size="20"><input type="submit" value="Update"></p>
</form>