sql protectie
Hallo,
Ik ben bezig met een clan website aan het maken voor een spel.
Ik heb geen verstand van die nieuwe php en ik ben benieuwd of dit wel veilig genoeg is tegen sql injectie ?
Mvg andy
Ik ben bezig met een clan website aan het maken voor een spel.
Ik heb geen verstand van die nieuwe php en ik ben benieuwd of dit wel veilig genoeg is tegen sql injectie ?
Mvg andy
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
if(isset($_POST['gegevens'])) {
mysql_query("UPDATE ".DB_CHARS." SET voornaam='".$_POST['voornaam']."' WHERE accountnaam='".$char->accountnaam."'");
mysql_query("UPDATE ".DB_CHARS." SET achternaam='".$_POST['achternaam']."' WHERE accountnaam='".$char->accountnaam."'");
mysql_query("UPDATE ".DB_CHARS." SET day='".$_POST['day']."' WHERE accountnaam='".$char->accountnaam."'");
mysql_query("UPDATE ".DB_CHARS." SET month='".$_POST['month']."' WHERE accountnaam='".$char->accountnaam."'");
mysql_query("UPDATE ".DB_CHARS." SET year='".$_POST['year']."' WHERE accountnaam='".$char->accountnaam."'");
mysql_query("UPDATE ".DB_CHARS." SET taal='".$_POST['taal']."' WHERE accountnaam='".$char->accountnaam."'");
echo "Je gegevens zijn verandert.<br><br><meta http-equiv=Refresh content=1 ;url=index1.php?p=profile>";
}
?>
if(isset($_POST['gegevens'])) {
mysql_query("UPDATE ".DB_CHARS." SET voornaam='".$_POST['voornaam']."' WHERE accountnaam='".$char->accountnaam."'");
mysql_query("UPDATE ".DB_CHARS." SET achternaam='".$_POST['achternaam']."' WHERE accountnaam='".$char->accountnaam."'");
mysql_query("UPDATE ".DB_CHARS." SET day='".$_POST['day']."' WHERE accountnaam='".$char->accountnaam."'");
mysql_query("UPDATE ".DB_CHARS." SET month='".$_POST['month']."' WHERE accountnaam='".$char->accountnaam."'");
mysql_query("UPDATE ".DB_CHARS." SET year='".$_POST['year']."' WHERE accountnaam='".$char->accountnaam."'");
mysql_query("UPDATE ".DB_CHARS." SET taal='".$_POST['taal']."' WHERE accountnaam='".$char->accountnaam."'");
echo "Je gegevens zijn verandert.<br><br><meta http-equiv=Refresh content=1 ;url=index1.php?p=profile>";
}
?>
Nee, er zit geen enkele beveiliging in.
Waarom 6 query's als het in 1 query kan?
Waarom 6 query's als het in 1 query kan?
Omdat ik dit overzichtelijker vind het is niet echt voor een bepaalde doel eind en meer alleen voor een aantal clan leden
wat zou ik moeten doen om het wel beveiligt te maken ?
heb dit ook nog in de config staan
wat zou ik moeten doen om het wel beveiligt te maken ?
heb dit ook nog in de config staan
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
mysql_connect(DB_HOST,DB_USER,DB_PASS) or die (DB_CONNECTION_ERROR);
mysql_select_db(DB_NAME) or die (DB_DBSELECT_ERROR);
$locatie = $_SERVER['REQUEST_URI'];
$array = Array();
$array[] = "mysql";
$array[] = "MYSQL";
$array[] = ";";
$array[] = "}";
$array[] = "{";
$array[] = "INSERT";
$array[] = "insert";
$array[] = "DROPTABLE";
$array[] = "droptable";
$array[] = "TRUNCATE";
$array[] = "truncate";
$array[] = "DROP";
$array[] = "drop";
$array[] = "UPDATE";
$array[] = "update";
$array[] = "COOKIE";
$array[] = "cookie";
$array[] = "ENV";
$array[] = "env";
$array[] = "FILES";
$array[] = "files";
$array[] = "POST";
$array[] = "post";
$array[] = "REQUEST";
$array[] = "request";
$array[] = "SERVER";
$array[] = "server";
foreach($array As $foutbezig) {
if(eregi($foutbezig,$locatie)) {
exit("Je mag hier geen SQL Injectie doen!");
}
}
mysql_select_db(DB_NAME) or die (DB_DBSELECT_ERROR);
$locatie = $_SERVER['REQUEST_URI'];
$array = Array();
$array[] = "mysql";
$array[] = "MYSQL";
$array[] = ";";
$array[] = "}";
$array[] = "{";
$array[] = "INSERT";
$array[] = "insert";
$array[] = "DROPTABLE";
$array[] = "droptable";
$array[] = "TRUNCATE";
$array[] = "truncate";
$array[] = "DROP";
$array[] = "drop";
$array[] = "UPDATE";
$array[] = "update";
$array[] = "COOKIE";
$array[] = "cookie";
$array[] = "ENV";
$array[] = "env";
$array[] = "FILES";
$array[] = "files";
$array[] = "POST";
$array[] = "post";
$array[] = "REQUEST";
$array[] = "request";
$array[] = "SERVER";
$array[] = "server";
foreach($array As $foutbezig) {
if(eregi($foutbezig,$locatie)) {
exit("Je mag hier geen SQL Injectie doen!");
}
}
Gewijzigd op 13/07/2015 14:31:47 door andytjuh Bruggeman
En waarom niet direct overstappen op de functies van MySQLi of PDO?
Omdat ik daar niks van snap heb altijd met deze php gewerkt
Gewijzigd op 13/07/2015 14:33:57 door andytjuh Bruggeman
Gebruik mysql_query_escape_string() om je aanpasbare waardes die je meegeeft in je query, zoals je $_POST.
En om het geheel meteen wat overzichtelijker te maken:
Maar er breekt een tijd aan dat de MySQL-functies niet meer zullen werken, dus het kan geen kwaad om alsnog de overstap te maken.
En om het geheel meteen wat overzichtelijker te maken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
mysql_query("UPDATE ".DB_CHARS."
SET voornaam='".mysql_real_escape_string($_POST['voornaam'])."',
achternaam='".mysql_real_escape_string($_POST['achternaam'])."',
day='".mysql_real_escape_string($_POST['day'])."',
month='".mysql_real_escape_string($_POST['month'])."',
year='".mysql_real_escape_string($_POST['year'])."',
taal='".mysql_real_escape_string($_POST['taal'])."
WHERE accountnaam='".$char->accountnaam."'
");
?>
mysql_query("UPDATE ".DB_CHARS."
SET voornaam='".mysql_real_escape_string($_POST['voornaam'])."',
achternaam='".mysql_real_escape_string($_POST['achternaam'])."',
day='".mysql_real_escape_string($_POST['day'])."',
month='".mysql_real_escape_string($_POST['month'])."',
year='".mysql_real_escape_string($_POST['year'])."',
taal='".mysql_real_escape_string($_POST['taal'])."
WHERE accountnaam='".$char->accountnaam."'
");
?>
Maar er breekt een tijd aan dat de MySQL-functies niet meer zullen werken, dus het kan geen kwaad om alsnog de overstap te maken.
Gewijzigd op 13/07/2015 14:38:37 door - Ariën -
Oohja dat was het mysql_real_escape_string bedankt!
Ik zou wel graag de nieuwe php willen leren...
Maar ik zit echt met de oude php in me hoofd en krijg het er op 1 of ander manier het er niet echt uit.
Ik zou wel graag de nieuwe php willen leren...
Maar ik zit echt met de oude php in me hoofd en krijg het er op 1 of ander manier het er niet echt uit.
Ten eerste mag je die hele lap code van je met die array en de eregi's weggooien. Waarom wou je speciale woorden filteren, terwijl je juist deze input onschadelijk wilt laten maken (wat mysql_real_escape_string doet).
Verder kan je op http://phptuts.nl/view/26/ een tutorial vinden over MySQLi.
Verder als je met de tijd mee wilt gaan, dan is het aan te raden om je te verdiepen in de migratie-changelog's van PHP. Hierin staat beschreven welke functies aangepast worden, welke toegevoegd worden en wat er verwijderd wordt.
http://php.net/manual/en/migration54.php
http://php.net/manual/en/migration55.php
http://php.net/manual/en/migration56.php
Verder kan je op http://phptuts.nl/view/26/ een tutorial vinden over MySQLi.
Verder als je met de tijd mee wilt gaan, dan is het aan te raden om je te verdiepen in de migratie-changelog's van PHP. Hierin staat beschreven welke functies aangepast worden, welke toegevoegd worden en wat er verwijderd wordt.
http://php.net/manual/en/migration54.php
http://php.net/manual/en/migration55.php
http://php.net/manual/en/migration56.php
Gewijzigd op 13/07/2015 14:43:00 door - Ariën -
Okee dankje wel :)




