我正在编写自己的下载跟踪器,我希望为用户提供在下载页面上显示自定义消息的功能。我想允许使用html和javascript,因此用户可以编写段落或使用广告代码等。
我将设置存储在配置文件中(不是我知道的最佳方式)
示例:<?php define("WAIT_MESSAGE", "htmlcodehere"); ?>
问题是引号或斜杠搞乱了配置文件,并且不会加载设置页面。我已经研究过添加斜杠试图逃避这些字符,但它只是添加了多个斜杠。
在我的配置文件中存储html内容/ javascript的最佳方法是什么?
编辑:已尝试过几种方法,但每次单击“保存”以更新配置文件时,所有引号都会被转义\“hello \”变为\“hello \”等答案 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代码,这些格式不会改变上述代码的含义。
此问题通常通过将任何此类字符转换为其等效的HTML实体来解决,以便您可以安全地存储
请查看http://php.net/manual/en/function.htmlspecialchars.php和http://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>