-1

Staroidsというゲームを作成しました。ユーザーが名前としてプレーンテキストを入力できるようにしたいだけです。

私は検証クライアント側を (JavaScript で) 作成しましたが、XSS をよく知っている友人が数分以内にリーダーボードに侵入し、より安全にするためにHTML Purifyを検討するように言いました。

インストール プロセスを読み、その内容を実行しましたが、ゲームを実行してスコアを送信すると、名前フィールドが空になり、空白の名前が送信されます。

ここに私のPHPコードがあります:

<?php

    require_once 'htmlpurifier/library/HTMLPurifier.auto.php';

    $config = HTMLPurifier_Config::createDefault();
    $purifier = new HTMLPurifier($config);
    $clean_html = $purifier->purify($dirty_html);

    $seconds = $_POST['seconds'];
    $kills = $_POST['kills'];
    $deaths = $_POST['deaths'];
    $wave = $_POST['wave'];
    $score = $_POST['score'];
    $name = mysql_real_escape_string($_POST['name']);
    $hash = $_POST['hash'];
    $date = $_POST['date'];
    $time = $_POST['time'];
    $timezone = $_POST['timezone'];
    $userdata = $_POST['userdata'];
    $display = $_POST['display'];



    mysql_connect("localhost", "root", "password");
    mysql_select_db("staroids");
    mysql_query("INSERT INTO scores (seconds, kills, deaths, wave, score, name, hash, date, time, timezone, userdata, display) VALUES ('$seconds', '$kills', '$deaths', '$wave', '$score', '$name', '$hash', '$date', '$time', '$timezone', '$userdata', '$display')");
    mysql_close($connect);
?>

私は HTML ページから name 変数を取得しています。これは、ユーザーが XSS を使用してリーダーボードにハッキングするのを防ぐために検証/浄化したかったものです。

4

1 に答える 1

3

$dirty_html は文字列、または文字列の配列です。おそらく、$dirty_html という名前のデータの配列を作成したことになります。

<?php
require_once 'htmlpurifier/library/HTMLPurifier.auto.php';

$dirty_html = array('seconds' => $_POST['seconds'], 'kills' => $_POST['kills'],'deaths' =>$_POST['deaths'],'wave' => $_POST['wave'],
'score' => $_POST['score'],'name' => mysql_real_escape_string($_POST['name']),'hash' => $_POST['hash'],
'date' => $_POST['date'],'time' => $_POST['time'], 'timezone' => $_POST['timezone'], 'userdata' => $_POST['userdata'],
display => $_POST['display']);  

$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);

print_r($clean_html);

?>

コードをテストしていないことに注意してください。

于 2013-08-09T09:14:41.783 に答える