10
<?php 

$x = array("<b>","<i>","b","i","<h1>hello</h1>");
print_r ($x);
echo "<hr>";
var_dump ($x);

これをhtmlソースに出力します!

Array
(
    [0] => <b>
    [1] => <i>
    [2] => b
    [3] => i
    [4] => <h1>hello</h1>
)
<hr>array(5) {
  [0]=>
  string(3) "<b>"
  [1]=>
  string(3) "<i>"
  [2]=>
  string(1) "b"
  [3]=>
  string(1) "i"
  [4]=>
  string(14) "<h1>hello</h1>"
}

明らかに、私はそれによってXSSされた可能性があります!
配列値がhtmlエンコードされていることを確認するにはどうすればよいですか?

4

8 に答える 8

10

Knittl のコードが機能しないことがわかりました。次のように機能させるには、いくつかの小さな変更を加える必要がありました。

array_walk_recursive($inputarray, function(&$v) { $v = htmlspecialchars($v); });

これは PHP5.3 以降で正常に動作します。

于 2013-04-27T14:20:44.407 に答える
8

または、print_r を文字列に保存し、2 番目のパラメーターを true に設定してエスケープすることもできます。

$arr = array('<script>alert("hey");</script>');
$str = print_r($arr, true);
echo htmlentities($str);

出力:

Array
(
   [0] => <script>alert("hey");</script>
)

スクリプトは実行されません

于 2015-02-19T18:12:08.543 に答える
7

A function that works for me is described in this PHP manual comment.

His function that replaces var_dump is implemented as:

function htmlvardump()
{
    ob_start(); 
    $var = func_get_args(); 
    call_user_func_array('var_dump', $var); 
    echo htmlentities(ob_get_clean());
 } 

This works for me in PHP 5.3+.

(Please note that there was a typo in the original source).

于 2012-10-12T07:01:49.653 に答える
5

簡単な解決策は、以下を使用することarray_walk_recursiveです。

array_walk_recursive($inputarray, function(&$v) { $v = htmlspecialchars($v); });
于 2012-04-07T16:48:42.133 に答える
1

Knittl のおかげで、ここに私が思いついたものがあります。私が望んでいたように動作します!

<?php 


$x = array("tag1" => "<b>","tag2" => "<i>","tag3" => "b","tag4" => "i","tag5" => "<h1>hello</h1>");

echo "<hr><pre>";
blp_print_r ($x);
echo "<hr>";
print_r($x);
echo "</pre><hr>"; 

/*

outputs this in the browser normal view

new one... 

Array
(
        ['tag1'] => <b>
        ['tag2'] => <i>
        ['tag3'] => b
        ['tag4'] => i
        ['tag5'] => <h1>hello</h1>
)


traditional one...

Array
(
    [tag1] => 
    [tag2] => 
    [tag3] => b
    [tag4] => i
    [tag5] => 
hello


)

*/



function blp_print_r($inputarray){
    echo "Array\n(\n";
    echo "<blockquote>";
    array_walk($inputarray,"html_encoder");
    echo "</blockquote>";
    echo ")";
}

function html_encoder($current_val,$current_key){

    echo "['" , htmlentities($current_key, ENT_QUOTES, "UTF-8") , "']", " => ";
    echo htmlentities($current_val, ENT_QUOTES, "UTF-8") , "\n";
}

?>
于 2012-04-07T20:16:51.427 に答える