Lieber j4nk3y,
Du machst da sehr gefährliche Sachen!
$chat = $_POST['chat']; $world = $_POST['world']; $language = $_POST['language']; $alliance = $_POST['alliance'];
Du kopierst hier potenziell bösartige Daten in Variablen um, denen man nicht mehr ansieht, dass ihr Inhalt potenziell böse ist.
$insert_message = "INSERT INTO chat (message_writer, message, message_date) VALUES ('$writer', '$chat', '$now')";
Spätestens hier wird deutlich, dass Du potenziell bösartige Daten ungeprüft in SQL-Code überführst.
Was würde wohl passieren, wenn in $_POST['chat']
folgender Wert stünde?
');DROP TABLE `chat_de`; --
Die Zeichenkette "de" in "chat_de" ist bitte durch das zu ersetzen, was in $_POST['language'] steht.
Informiere Dich umgehend über Kontextwechsel und kontextgerechtes Kodieren von Daten!!
Wenn Du das getan hast, dann gewöhnst Du Dir an, potenziell bösartige Daten nicht mehr zu verstecken:
$insert_message = sprintf(
'INSERT INTO chat ('
. 'message_writer, message, message_date'
. ') VALUES ('
. '\'%1$s\', \'%2$s\', \'%3$s\''
. ')',
$_SESSION['user_name'],
$_POST['chat'],
time()
);
Wenn Dir das zu doof ist, dann nutze PDO. Dort kannst Du das so notieren:
$myPDO = new PDO(
sprintf(
'mysql:dbname=%1$s;host=%2$s;charset=UTF8;',
$settings['db-name'],
$settings['db-host']
),
$settings['db-user'],
$settings['db-pw'],
array(
PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_FOUND_ROWS => true,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
)
);
$statement = $myPDO->prepare(
'INSERT INTO chat ('
. 'message_writer, message, message_date'
. ') VALUES ('
. ':message_writer, :message, :message_date'
. ');'
);
$statement->execute(array(
':message_writer' => $_SESSION['user_name'],
':message' => $_POST['chat'],
':message_date' => time()
));
Diese PDO-Kiste sorgt dafür, dass die potenziell bösartigen Daten in einer Weise kodiert werden, die Dein Programm nicht kaputt machen.
Liebe Grüße,
Felix Riesterer.