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 を使用してリーダーボードにハッキングするのを防ぐために検証/浄化したかったものです。