webForumDet fria alternativet

hjälp!

5 svar · 202 visningar · startad av visslaren

visslarenMedlem sedan juli 20011 222 inlägg
#1

jag har gjort ett forum åt spelbasen.net. men efter en spamattack så plockade jag ner det och håller på att kolla igenom koden. anledningen att jag skriver detta här är att spammaren lyckades fortsätta spamma trots att jag tagit bort hans användarid utan att logga in. så jag undrar om nån kan hjälpa mig att hitta lite säkerhetsluckor?

<?

$user2=strtolower($user);
$länk=mysql_connect();
$db=mysql_select_db();
$sql2="SELECT username, id, password FROM forumusers WHERE username='$user2'";
$result = mysql_query("$sql2");
$rad=mysql_fetch_row($result);
$usern=strtolower($rad[0]);
$wid=$rad[1];
$validate=$rad[2];
if($user2==$usern) {
if($pass==$validate) {
$datum=date("Y-m-d, H:i:s");
$tid=date("H:i:s");
$antal="0";
$isreply="no";
$replyto="0";

$sql="INSERT INTO forum(title, content, wnamn, writer, datum, tid, isreply, replyto, antal, icon) VALUES ('$title','$content','$user','$wid','$datum','$tid','$isreply','$replyto','$antal','$icon')";
mysql_query("$sql");
$sql3="SELECT id FROM forum WHERE title='$title' AND content='$content' AND replyto='$replyto'";
$result = mysql_query("$sql3");
$rad2=mysql_fetch_row($result);
$pid=$rad2[0];
$sql4="UPDATE forum SET replyto='$pid' WHERE id='$pid'";
mysql_query("$sql4");
$sql5="UPDATE forumusers SET antal=antal+1 WHERE id='$wid'";
mysql_query("$sql5");
Session_unset();
session_register("users");
$users=$user;
session_register("passo");
$passo=$pass;
echo ("<meta http-equiv=refresh content=0;URL=forum.php>");
}
else {
?>
<script language="javascript">
<!--
window.alert('Lösenordet stämde inte');
//-->
</script>
<?
echo ("<meta http-equiv=refresh content=0;URL=startnew.php>");
}
}
else {
?>
<script language="javascript">
<!--
window.alert('Du har angett fel användarnamn');
//-->
</script>
<?
echo ("<meta http-equiv=refresh content=0;URL=startnew.php>");
}
mysql_close($länk);
?>

------------------
Naturligtvis var det många som upptäckte Amerika innan Columbus. Men de lyckades alltid tysta ner det hela. - Oscar Wilde
www.spelbasen.net

visslaren a.k.a. noijja

2basMedlem sedan juni 2001181 inlägg
#2

Hejsan,

när jag tittar lite fort på det, så kan jag se en fara med din första mysql fråga. Om man skickar in en $user som inte finns i databasen (eller ännu bättre $user="") och ett $pass="" så borde man komma förbi password kontrollen.

Är inte hundra på att det jag säger är rätt, men prova det.

För att fixa till det, är det bara att kolla om du får några rader tillbaka från din mysql fråga.

Nu skall jag sova ;)

------------------
Gratis hemsideadress och email => http://www.has.it

visslarenMedlem sedan juli 20011 222 inlägg
#3

jo att det gick att skriva in utan att vara registrerad visste jag. skrev jag ju :)
så nån som kan ge lite tips och råd på hur man kan förbättra det. har själv stirrat mig blind på denna kod :(

------------------
Naturligtvis var det många som upptäckte Amerika innan Columbus. Men de lyckades alltid tysta ner det hela. - Oscar Wilde
www.spelbasen.net

visslaren a.k.a. noijja

sgtpepperMedlem sedan apr. 20007 588 inlägg
#4

Hmm, din kod är lite.. geggig.. rent utseendemässigt, men det låter jag passera :).

Det du skall göra är att med en SELECT-sats plocka ut den användare som har användarnamn och lösen satta till de angivna uppgifterna och sedan kontrollera att SELECT-satsen inte returnerade 0 rader.

Om 0 rader returnerades så betyder det att användaren med användarnamn $user och lösenord $pass inte finns i databasen eller att användarnamnet fanns men att lösenordet var fel.

// Fixa till inmatningarna
$user = addslashes(strtolower($user));
$pass = addslashes($pass);

$sql="SELECT username, id FROM forumusers WHERE username='$user' AND password='$pass'";
$result = mysql_query($sql);

if (mysql_num_rows($result) > 0)
{
	// Jepp, användaren fanns och angav rätt uppgifter
}
else
{
	// Nepp, användaren fanns antingen ej eller angav fel uppgifter
}
?>

------------------
"To iterate is human, to recurse, divine" - L. Peter Deutch

[Redigerat av sgtpepper den 08 sep 2001]

visslarenMedlem sedan juli 20011 222 inlägg
#5

tackar. ska kolla om det fungerar. :) återkommer :)

------------------
Naturligtvis var det många som upptäckte Amerika innan Columbus. Men de lyckades alltid tysta ner det hela. - Oscar Wilde
www.spelbasen.net

visslaren a.k.a. noijja

visslarenMedlem sedan juli 20011 222 inlägg
#6

det fungera. :) tackar

------------------
Naturligtvis var det många som upptäckte Amerika innan Columbus. Men de lyckades alltid tysta ner det hela. - Oscar Wilde
www.spelbasen.net

visslaren a.k.a. noijja

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)