Avatar billede Slettet bruger
30. januar 2011 - 21:34 Der er 10 kommentarer og
1 løsning

SQL Injections - hacker attack

Hej med jer.

Jeg prøver lige herinde, da jeg har brug for en PHP ekspert. :-)
De var gode til at hjælpe under MySQL, men ingen var lige klar over hvordan det skal laves i PHP desværre, så håber der er en herinde der kan hjælpe. :-)

Min site har desværre været hacket og har fundet ud af der er blevet brugt SQL injections, så skal have styr på mine SQL sætninger... Og de provokerer mig desværre derinde, så håber jeg snarest kan få lukket hullet. Det er virkelig belastende og mit site var nede flere dage pga. det og jeg frygter det bliver værre hvis jeg ikke får styr på det. :-(

Jeg ved jeg skal bruge prepared statements og har også prøvet at læse lidt om det, men synes ikke helt jeg kan få styr på det.
Så håber der er en der kan hjælpe med at sikre nedenstående:

$connection = mysql_connect($host,$user,$pass);
mysql_select_db("$db");
$newid= $_GET[id];
$query = mysql_query("UPDATE mylist SET klik = klik + 1 WHERE id = $_GET[id]");
$query="SELECT * FROM mylist where ID=$newid";
$result=mysql_query($query) or die(mysql_error());
echo "<tablel>\n";
while($row=mysql_fetch_assoc($result))
{

Mvh.
Henrik
Avatar billede kentora Nybegynder
30. januar 2011 - 21:49 #1
Her er en funktion, hentet og kopieret fra w3schools, der gerne skulle sikre din database.

<?php
function check_input($value)
{
// Stripslashes
if (get_magic_quotes_gpc())
  {
  $value = stripslashes($value);
  }
// Quote if not a number
if (!is_numeric($value))
  {
  $value = "'" . mysql_real_escape_string($value) . "'";
  }
return $value;
}

Din kode hedder nu (udover ovenstående function):

$connection = mysql_connect($host,$user,$pass);
mysql_select_db("$db");
$newid= check_input($_GET[id]);
$query = mysql_query("UPDATE mylist SET klik = klik + 1 WHERE id = $newid");
$query="SELECT * FROM mylist where ID=$newid";
$result=mysql_query($query) or die(mysql_error());
echo "<table>\n";
while($row=mysql_fetch_assoc($result))
{
Avatar billede Slettet bruger
30. januar 2011 - 22:14 #2
Mange tak, det vil jeg lige prøve.. :-)
Avatar billede repox Seniormester
31. januar 2011 - 08:40 #3
magic_quotes er i den nuværende PHP stable deprecated og vil fra PHP6 ikke længere være en del af PHP, hvorfor funktionen i #1 er irrelevant - og vil sandsynligvis også fejle.

mysql_real_escape_string() kan fint udgøre det for den unødvendige og forældede funktion.

Endnu bedre ville det være hvis du begyndte at anvende Prepared Statements: http://php.net/mysqli
Avatar billede ksoren Nybegynder
31. januar 2011 - 12:56 #4
UPDATE mylist SET klik = klik + 1 WHERE id = $newid

mysql_real_escape_string() duer ikke her. $newid er ikke angivet som en streng i din sql.

$newid = (int)$_GET['id'];

Det vil tvinge php til at lave string-variablen om til en int. Hvis det ikke kan lade sig gøre, bliver den bare lavet om til 0. Men så ved du, at den aldrig indeholder hacker-ting.
Avatar billede arne_v Ekspert
01. februar 2011 - 01:03 #5
Hvorfor skulle det være bedre at få 0 indsat end at få en fejl hvis der forsøges lavet SQL injection??
Avatar billede ksoren Nybegynder
01. februar 2011 - 07:25 #6
Jeg ved såmænd ikke om det er bedre, men det er bedre at variablen er 0, end at den indeholder ulovelige ting. Jeg tror ikke OP leder efter ret meget andet end det.
Avatar billede repox Seniormester
01. februar 2011 - 12:23 #7
#6
Uden at kunne tale på arne_v's vegne, vil jeg mene at det undrer at du mener at ukontrolleret indhold 'er bedre' at få i databasen end alligevel blot lade folk smide ind hvad de vil gennem SQL injection.

Et bedre råd ville være at validere inputtet til formålet.
Avatar billede ksoren Nybegynder
01. februar 2011 - 14:12 #8
Her bliver id så heller ikke gemt, men brugt som et søgekriterie. Hvis id=0, kan man muligvis antage at nogen har fusket ved input, og så tage den derfra.

Pointen var bare at sikre, at id ikke indeholder noget skadeligt, og at mysql_real_escape_string ikke kan uskadeliggøre brugerens input i dette tilfælde.
Avatar billede Slettet bruger
05. februar 2011 - 09:24 #9
Hmmm.. nu blev jeg jo godt nok lidt forvirret....
Min hjemmeside bliver ved med at gå ned, så tror der er noget bøvl stadigvæk....

Er der nogen der har lyst til at kigge på min kode og få den sikret.. Vil jeg evt. godt give noget for det.
Har ikke nerver til dette her mere.... :-(
Det er ikke meget kode det drejer sig om.. Kun nogle enkelte sider hvor den snakker sammen med databasen.

Mvh.
Henrik
Avatar billede repox Seniormester
05. februar 2011 - 10:26 #10
Jeg kan godt prøve at kigge på det.

Send mig en privat besked, så tager vi den derfra.
Avatar billede Slettet bruger
20. november 2012 - 11:51 #11
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester