0

私は独自のダウンロード トラッカーを作成しており、ダウンロード ページにカスタム メッセージを表示する機能をユーザーに提供したいと考えています。ユーザーが段落を書いたり、広告コードを使用したりできるように、html と javascript を許可したい。

設定を構成ファイルに保存しています(私が知っている最良の方法ではありません)

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

問題は、引用符またはスラッシュが構成ファイルを台無しにし、設定ページが読み込まれないことです。これらの文字をエスケープするためにスラッシュを追加することを検討しましたが、複数のスラッシュを追加するだけです。

構成ファイルにhtmlコンテンツ/javascriptを保存する最良の方法は何ですか?

編集: いくつかの方法を試しましたが、保存をクリックして構成ファイル \"hello\" を更新するたびに引用符がエスケープされ、\"hello\" などになります。

4

5 に答える 5

2

ユーザーを信頼しすぎて、サイトに JavaScript や HTML を投稿したり保存したりしてはいけません。

于 2012-04-26T08:59:22.740 に答える
0

ユーザーが実際に HTML/Javascript/PHP をページに挿入できるようにすることは、非常に悪いことです

とはいえ、問題は時々私たち全員を悩ませるものです。必要なのは、上記のコードの意味を変更しない形式で HTML コードを保存することです。

この問題は通常、そのような文字を同等の HTML エンティティに変換して、安全に保存できるようにすることで解決されます。

詳細については、 http: //php.net/manual/en/function.htmlspecialchars.phpおよびhttp://www.php.net/manual/en/function.htmlspecialchars-decode.phpをご覧ください。

于 2012-04-26T09:05:55.067 に答える
0

それはまったく安全ではありません。誰かが PHP を簡単に挿入できます。

あなたができること (これは少しハックです) はbase64_encode()、データに対して、そしてbase64_decode()それを使用する必要があるときにそれを行うことです。そうすることで、引用符/特殊文字の問題とセキュリティの問題が解消されます。

構成ファイルに base64_encoded HTML を記述したら、それを使用するには、次のようにします。

<?php
    echo base64_decode(WAIT_MESSAGE);
?>
于 2012-04-26T09:02:05.717 に答える
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>
于 2012-04-26T09:54:37.440 に答える
0

シングル ' のように試しましたか?

<?php define('WAIT_MESSAGE', '<p>Please wait.. your download starts shortly</p>'); ?>
于 2012-04-26T08:59:11.727 に答える