Is dit veilig?
Ik heb het onderstaande deel gemaakt maar ben eigenlijk benieuwt of dit wel veilig is, als iemand tips/verbetering heeft hoor ik het graag.
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
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
<?php
require_once("config/config.php");
$sql = "
SELECT
users.id,
staff.userid,
staff.forgameid,
staff.position
FROM
users,
staff
WHERE
users.id = staff.userid
AND
staff.forgameid = " . $_GET['gameid']"
AND
users.id = " . $_SESSION['id'] . "";
$res = mysql_query($sql) or die (mysql_error());
while($list = mysql_fetch_object($res)) {
if($list->active >= "2"){
//De pagina die iemand mag zien als zijn active 2 of hoger is
}
else{
//De pagina die iemand te zien krijgt wanner zijn active lager is dan 2
}
}
?>
require_once("config/config.php");
$sql = "
SELECT
users.id,
staff.userid,
staff.forgameid,
staff.position
FROM
users,
staff
WHERE
users.id = staff.userid
AND
staff.forgameid = " . $_GET['gameid']"
AND
users.id = " . $_SESSION['id'] . "";
$res = mysql_query($sql) or die (mysql_error());
while($list = mysql_fetch_object($res)) {
if($list->active >= "2"){
//De pagina die iemand mag zien als zijn active 2 of hoger is
}
else{
//De pagina die iemand te zien krijgt wanner zijn active lager is dan 2
}
}
?>
Jou url wordt strax iets als www.site.......user.id=1234
wat nou als iemand daar van maakt
www.site.......user.id=1234 AND DROP $db
dan ziet je query er ineens heel anders uit.
Dus maak een lijstje waar hij aan moet voldoen en check hem daarop voordat je hem in je sql zet
doen, dan weet je zeker dat het alleen een cijfer is en niet dat drop erachter.
Gameid word meegegeven in de url
hij moet dus kijken of de user voor dat gameid is door tabbel staff.forgameid als dat zo is dan moet er gekeken worden of de staff.active 2 of hoger is, zoja mag hij (a) zien zo nee mag hij (b) zien.
is ongeveer hetzelfde,
dat is het groote gemak van numerieke input versus sql-injection: je checked of het numeriek is, zoniet, stoppen, zowel, doorgaan
want er zijn zover ik weet geen commando's in mysql waar ook maar enig cijfer in zit
if ( !is_numeric($_GET['gameid']) || !is_numeric($_SESSION['id']) )
{
die('Ingevoerde waardes kloppen niet ');
}
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
38
39
40
41
42
43
44
45
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
38
39
40
41
42
43
44
45
<?php
require_once("config/config.php");
if(is_numeric($_GET['gameid'])){
$sql = "
SELECT
users.id,
staff.userid,
staff.forgameid,
staff.position
FROM
users,
staff
WHERE
users.id = staff.userid
AND
staff.forgameid = " . $_GET['gameid']"
AND
users.id = " . $_SESSION['id'] . "
LIMIT 1";
$res = mysql_query($sql) or die (mysql_error());
$list = mysql_fetch_object($res);
if($list->active >= "2"){
//De pagina die iemand mag zien als zijn active 2 of hoger is
}
else{
//De pagina die iemand te zien krijgt wanner zijn active lager is dan 2
}
}elseif(!isset($_GET['gameid'])){
// indexpagina
}else{
//pagina wordt gehackt
echo 'Hacking attemp!';
exit;
}
?>
require_once("config/config.php");
if(is_numeric($_GET['gameid'])){
$sql = "
SELECT
users.id,
staff.userid,
staff.forgameid,
staff.position
FROM
users,
staff
WHERE
users.id = staff.userid
AND
staff.forgameid = " . $_GET['gameid']"
AND
users.id = " . $_SESSION['id'] . "
LIMIT 1";
$res = mysql_query($sql) or die (mysql_error());
$list = mysql_fetch_object($res);
if($list->active >= "2"){
//De pagina die iemand mag zien als zijn active 2 of hoger is
}
else{
//De pagina die iemand te zien krijgt wanner zijn active lager is dan 2
}
}elseif(!isset($_GET['gameid'])){
// indexpagina
}else{
//pagina wordt gehackt
echo 'Hacking attemp!';
exit;
}
?>
Edit 1: ik denk niet dat je meer dan 1 rij hebt, dan kan het ook zo
Edit 2: typo in code
Gewijzigd op 16/02/2006 23:29:00 door Hipska BE
Gijs:
[...]
want er zijn zover ik weet geen commando's in mysql waar ook maar enig cijfer in zit
want er zijn zover ik weet geen commando's in mysql waar ook maar enig cijfer in zit
Als er cijfers in zouden zitten, zou dat nog geen probleem vormen. Pas als de hele opdracht uit ALLEEN MAAR cijfers bestaat zou je met een integer problemen kunnen krijgen.
Als je een cijfer in je qeury wilt hebben, hoef je alleen maar
toe te voegen