Tekst veilig de Database in
Ik heb een nieuwsscript maar de tekst die de gebruiker in het CMS kan invoeren wordt niet gechecked voordat het de DATABASE ingaat. Ik heb gehoord dat dat kan zorgen voor grote problemen.
Iemand een scriptje hoe ik eerst kan checken of de tekst geen rare SQL queries bevat?
dankje!
Marije
Alles wat je invuld checken en alles door addslashes en htmlspecialchars halen... dan heb je de meeste fouten eruit
Dat houdt in:
mysql_real_escape_value
addslashes
htmlentities
Ik was eerder :P
die drie regels moet ik aan mijn code toevoegen?
Wat houd dat in?
Iets van alle mogenlijke query commandos blokkeren tussen die in de $str staan?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
function safeMysqlInput( $input ) {
$output = mysql_real_escape_string( $input );
$output = addslashes( $output );
$output = htmlentities( $output );
return $output;
}
?>
function safeMysqlInput( $input ) {
$output = mysql_real_escape_string( $input );
$output = addslashes( $output );
$output = htmlentities( $output );
return $output;
}
?>
Als je dan een bepaalde waarde hebt die je in de database wilt doen, doe je $waarde = safeMysqlInput( $waarde ).
Je kan het ook direct in je query doen: "INSERT INTO tabel (waarde) VALUES ( '" . safeMysqlInput( $waarde ) . "' )"
Gewijzigd op 28/03/2006 19:51:00 door Pim Vernooij
Alleen weet ik niet zo goed waar ik de functie zou moeten plaatsen binnen mijn code.
if ($_GET[show] == "add" || $_POST["show"] == "add")
{
if ($_POST["titel"] && $_POST["msg"] && $_POST["mydate"] && $_POST["kop"])
{
$sql = "INSERT INTO nieuws (id, titel, msg, datum, kop) VALUES ('', '$_POST[titel]', '$_POST[msg]', '$_POST[mydate]', '$_POST[kop]')";
$res = mysql_query($sql);
if ($res)
{
echo "Het bericht is toegevoegd aan de site.";
}
else
{
echo "Het bericht is niet toegevoegd aan de site";
}
}
else
{
if ($_POST["submit"])
$err = "Enkele velden vergeten.";
if ($_POST["mydate"])
$cdate = $_POST["mydate"];
else
$cdate = date("Y-m-d");
$row[msg] = nl2br($row[msg]);
dit is onderdeel van mijn code. Zou je me kunnen vertellen waar ik dat het beste kan plaatsen?
jou query word dan zo:
en weten jullie ook een manier om te testen of het werkt? ik weet niet welke kweeries je wel en niet kunt/mag invoeren nadat je deze functie hebt aangeroepen.
Ik zit al voor je te kijken in de queery waar een 'of " te veel of te weinig is... Blijf dit lastig vinden!!
Deze kleuren bij mij in mijn editor niet goed dus kloppen dan niet.
hmm geen idee. Heeft het niets te maken met de dubbele ' en " ?
Code (php)
1
2
3
2
3
<?php
('', '" . safeMysqlInput( $_POST['titel'] ) ."', '" . safeMysqlInput( $_POST['msg'] . "', '" . safeMysqlInput( $_POST['mydate'] . "', '" . safeMysqlInput( $_POST['kop'] . "')";
?>
('', '" . safeMysqlInput( $_POST['titel'] ) ."', '" . safeMysqlInput( $_POST['msg'] . "', '" . safeMysqlInput( $_POST['mydate'] . "', '" . safeMysqlInput( $_POST['kop'] . "')";
?>
Waarvoor staat dit '' aan het begin van de query als ik vragen mag?
$_PEST['kop']
;)
Post hier de query die je gebruikt & de error die je krijgt... dan is het wat makkelijker voor ons :D
ID dus :)
Ik weet het niet, maar het geeft sowieso een fout. Het moet namelijk zijn:
Code (php)
1
2
3
4
2
3
4
<?
$sql = "INSERT INTO nieuws (id, titel, msg, datum, kop) VALUES ('', '". safeMysqlInput( $_POST['titel'] ) ."', '" . safeMysqlInput( $_POST['msg'] . "', '" . safeMysqlInput($_POST['mydate'] . "', '" . safeMysqlInput( $_POST['kop'] . "')";
?>
$sql = "INSERT INTO nieuws (id, titel, msg, datum, kop) VALUES ('', '". safeMysqlInput( $_POST['titel'] ) ."', '" . safeMysqlInput( $_POST['msg'] . "', '" . safeMysqlInput($_POST['mydate'] . "', '" . safeMysqlInput( $_POST['kop'] . "')";
?>
Gewijzigd op 28/03/2006 20:22:00 door Pieter van Linschoten
veroorzaakt door deze code :
if ($_GET[show] == "add" || $_POST["show"] == "add")
{
if ($_POST["titel"] && $_POST["msg"] && $_POST["mydate"] && $_POST["kop"])
{
$sql = "INSERT INTO nieuws (id, titel, msg, datum, kop) VALUES ('', '" . safeMysqlInput( $_POST['titel'] ) ."', '" . safeMysqlInput( $_POST['msg'] . "', '" . safeMysqlInput( $_POST['mydate'] . "', '" . safeMysqlInput( $_POST['kop'] . "')";
$res = mysql_query($sql);
Als Magic Quotes aan staat , dan draai je dubbel addslashes , en krijg je de slashes dus daadwerkelijk in je text te staan..
EDIT: Hij draait dan geloof ik ook dubbel mysql_real_escape_string , en ik weet niet wat er dan gebeurd.. ( volgens mij is dat juist onveilig dan)
Gewijzigd op 28/03/2006 20:25:00 door Donster
@ Lapidi : Ik probeer altijd de oplossingen te lezen en te begrijpen en probeer dan er wat van te leren vandaar mijn vraag. Bedankt voor je uitleg en juiste queery ;0)