Vanliga säkerhetshål och lösningar

PHPportalen Forum Index » PHP
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget Gå till sida Föregående  1, 2, 3 ... 8, 9, 10, 11  Nästa
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
webbhelp



Medlem i: 4350 dagar
Från: Sverige
Status: Online



#626076
Inlägg Skrivet: 2009-03-01 17:12      Ämne: Citera

ok, men jag har sett:
' OR 1=1 #' så tror jag det var, vet någon vad den koden gör?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Skicka e-post Besök användarens hemsida MSN Messenger
pengi
Ex-Moderator



Medlem i: 4458 dagar
Från: JO57XQ
Status: Offline



#626077
Inlägg Skrivet: 2009-03-01 17:15      Ämne: Citera

cort3x skrev:
En sak som jag är intresserad utav, det är lite kommandon och saker man kan skriva för att kolla själv om en hemsida är säker eller inte.

Det finns inte något generellt verktyg för det, och framförallt aldrig någon generell garanti för att en sida är säker.

Det finns hjälpmedel som jag inte kan namnet på som kontrollerar vissa mönster, men de kan bara hitta eventuella väldigt enkla hål, men verktyg har inte någon aning om det är önskat beteende eller säkerhetshål. En annan sak är att om någon eller något inte hittar ett hål är det inte någon garanti för att det inte finns.

Gör rätt från början, och designa sidan för att få bort så mycket mänsklig faktor som möjligt. Det går att göra väldigt bra med t.ex. placeholders vad gäller SQL-injektioner. (prepared statements i PDO t.ex.)
 

_________________
"Question everything. Never trust propaganda. Keep on hacking." - Phrack
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
webbhelp



Medlem i: 4350 dagar
Från: Sverige
Status: Online



#626106
Inlägg Skrivet: 2009-03-01 18:31      Ämne: Citera

man kan väl visst köra en 2 query i en fråga:


' union select kolumn, kolumn from table

Den funkar väl? eller, då går det ju med mysql_*
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Skicka e-post Besök användarens hemsida MSN Messenger
pengi
Ex-Moderator



Medlem i: 4458 dagar
Från: JO57XQ
Status: Offline



#626109
Inlägg Skrivet: 2009-03-01 18:51      Ämne: Citera

webbhelp skrev:
ok, men jag har sett:
' OR 1=1 #' så tror jag det var, vet någon vad den koden gör?


# är kommentar i vissa sql-versioner, precis som // i PHP, dvs. ignorerar resten i queryn. Intressant i vissa fall om det fungerar, men går ofta att komma runt på andra sätt istället...

OR 1=1 betyder OR true, vilket säger att oavsett allt innan är queryn alltid sann, och hämtar alla rader i tabellen.

Vad gäller inloggning så brukar första raden ofta vara administratör (första registrerade), vilket gör att man mycket troligt får fulla rättigheter. (inte nödvändigtvis dock)
 

_________________
"Question everything. Never trust propaganda. Keep on hacking." - Phrack
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
webbhelp



Medlem i: 4350 dagar
Från: Sverige
Status: Online



#626112
Inlägg Skrivet: 2009-03-01 19:09      Ämne: Citera

ok, tack för svaret men funkar inte den:

' union select kolumn, kolumn from table


då kör man ju 2 vad heter det querys i en....
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Skicka e-post Besök användarens hemsida MSN Messenger
webbhelp



Medlem i: 4350 dagar
Från: Sverige
Status: Online



#626302
Inlägg Skrivet: 2009-03-02 23:47      Ämne: Citera

ingen?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Skicka e-post Besök användarens hemsida MSN Messenger
Tarre



Medlem i: 4918 dagar

Status: Offline



#626314
Inlägg Skrivet: 2009-03-03 00:48      Ämne: Citera

webbhelp: JOIN Surprised?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Asse



Medlem i: 4342 dagar

Status: Offline



#627789
Inlägg Skrivet: 2009-03-12 19:48      Ämne: Citera

hejsan jätte bra tråd Smile . men har en liten fråga. jag har deta i min conn.php

PHP:
1:
 /
2:
En funktion att användas när magic_quotes_gpc inte är sattFör att förhindra SQL-injectionseller i lidrigare fall MySQl-fel.
3:
function db_escape ($post)
4:
{
5:
   if (is_string($post)) {
6:
     if (get_magic_quotes_gpc()) {
7:
        $post stripslashes($post);
8:
     }
9:
     return mysql_real_escape_string($post);
10:
   }
11:
   
12:
   foreach ($post as $key => $val) {
13:
      $post[$key] = db_escape($val);
14:
   }
15:
   
16:
   return $post;
17:


och så sätter jag bara
PHP:
1:
 
2:
<?php
3:
$_POST db_escape($_POST); 
4:
?>
5:
 


är det likadant som
PHP:
1:
  $username mysql_real_escape_string($_POST['username']);  


tacksam för svar Smile
 

_________________
Vill försöka men man lyckas inte alltid
http://skonebo.se
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Skicka e-post Besök användarens hemsida MSN Messenger
überfuzz



Medlem i: 4700 dagar

Status: Offline



#627791
Inlägg Skrivet: 2009-03-12 19:58      Ämne: Citera

db_escape ser ut att ta en hel array som argument. mysql_real_escape_string kollar en variabel.

Edit, stavade fel.
 

_________________
Windows macht frei
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
pengi
Ex-Moderator



Medlem i: 4458 dagar
Från: JO57XQ
Status: Offline



#627792
Inlägg Skrivet: 2009-03-12 20:00      Ämne: Citera

db_escape ser ut att vara den som kommer från maltes inloggning, och det är inte någon funktion jag kan förespråka att använda. Det är en funktion av lathet.

Varför jag säger så är att den gör två saker på en gång som är (nästan) helt fristående.

först tar den indatan och förutsätter att den kommer direkt från användaren.

sedan returnerar den en sträng som den förutsätter ska direkt till databasen.

Men det är långt ifrån all indata som ska till databasen och det är långt ifrån allt som ska till databasen som kommer från användaren genom post/get/cookie. Det finns mycket ofta som kommer från databasen och ska in i databasen på något annat ställe.

I alla fall som det inte är användardata -> databas kommer den bara ge dig problem.

Dock ifall sidan garanterat endast hanterar text och all användar-indata ska till databasen och allt som ska till databasen kommer från användarindata, så fungerar den, men vad jag har sett så är det inte någon sida som är sådan. (om det inte är en simpel gästbok).

Så därför rekommenderar jag: tänk om, gör om och gör rätt.

Gör t.ex. en funktion som hanterar placeholders. Ett interface likt:
do_query( 'SELECT * FROM nyheter WHERE id = ?', $_GET['id'] )

eller:
do_query( 'INSERT INTO user (name, password) VALUES (?,?)', $_POST['username'], md5( $_POST['password'] ) );
(senare visar ett typfall där användardata inte går direkt till databasen, utan i detta fall via md5, som i sig är svag för lösenord, men det är en annan fråga)

(om det inte var uppenbart så ska interfacet byta ut alla ? mot argumenten som kommer efteråt escapeade och sedan köra queryn)

überfuzz skrev:
db_escape ser ut att ta en hel array som argument. mysql_real_escape_string kollar en variabel.

Edit, stavade fel.

db_escape gör mer, den tar bort beroende på magic_quotes_gpc med. Den kan ta en sträng om man vill, men array-stödet är ett tillägg. Dock ger det problem om man stoppar in en int.
 

_________________
"Question everything. Never trust propaganda. Keep on hacking." - Phrack
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Soccer-Story



Medlem i: 3951 dagar

Status: Offline



#636183
Inlägg Skrivet: 2009-05-05 18:52      Ämne: Citera

Jag fick nyss höra ett en av mina sidor har blivit hackad. Vet dock inte om det är sant men jag tror det. Sidan är: http://denati.eu/

Jag tror inte den är vulnerable mot något i denna tråd så hur kan dom ha gjort?
 

_________________
muu
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
pengi
Ex-Moderator



Medlem i: 4458 dagar
Från: JO57XQ
Status: Offline



#636187
Inlägg Skrivet: 2009-05-05 19:00      Ämne: Citera

Soccer-Story skrev:
Jag fick nyss höra ett en av mina sidor har blivit hackad. Vet dock inte om det är sant men jag tror det. Sidan är: http://denati.eu/

Jag tror inte den är vulnerable mot något i denna tråd så hur kan dom ha gjort?

Om du tror den är säker, då är den garanterat inte det; om du vet att den är säker så är den möjligt det.

Det är bara att leta i loggar och försöka spåra hur dom kom in... Leta i accessloggar osv.

Men vill du ha hjälp att gå igenom specifika fallet så är det en ny oklistrad tråd som gäller, och då hjälper jag gärna...
 

_________________
"Question everything. Never trust propaganda. Keep on hacking." - Phrack
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Soccer-Story



Medlem i: 3951 dagar

Status: Offline



#636197
Inlägg Skrivet: 2009-05-05 19:43      Ämne: Citera

Tack så mycket! Smile
Tråden: http://www.phpportalen.net/viewtopic.php?p=636196#636196
 

_________________
muu
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
bds



Medlem i: 4216 dagar
Från: Vallentuna
Status: Offline



#646297
Inlägg Skrivet: 2009-07-11 00:43      Ämne: Citera

Måste bara lägga till en notis, de är att du säger att
"(lägg märke till att nl2br körs efteråt, annars kommer alla <br> synas på sidan som text istället för radbrytningar)

Vill ni kunna formatera text med html, och det inte är en admin (som man egentligen borde lita på) som har skrivit så får ni lite problem. Det är då bara att koda ett mer avancerat html-filter. Det är dock ganska komplext, men inte omöjligt."

Men koden ser ut såhär:

PHP:
1:
 
2:
<?php
3:
echo '<table><tr><td>';
4:
$result mysql_query('SELECT * FROM meddelanden ORDER BY id DESC');
5:
while($row mysql_fetch_assoc($result)) {
6:
   echo "<b>Meddelande #" $row['id'] . "</b><br />";
7:
   echo nl2br(htmlentities($row['meddelande'])) . "<br />";
8:
}
9:
mysql_free_result($result);
10:
echo '</td></tr></table>';
11:
?>
12:
 


Bara om du kan ändra så man kan ta del av din kod =)
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
pengi
Ex-Moderator



Medlem i: 4458 dagar
Från: JO57XQ
Status: Offline



#646298
Inlägg Skrivet: 2009-07-11 00:51      Ämne: Citera

bds skrev:
Måste bara lägga till en notis, de är att du säger att
"(lägg märke till att nl2br körs efteråt, annars kommer alla <br> synas på sidan som text istället för radbrytningar)

Vill ni kunna formatera text med html, och det inte är en admin (som man egentligen borde lita på) som har skrivit så får ni lite problem. Det är då bara att koda ett mer avancerat html-filter. Det är dock ganska komplext, men inte omöjligt."

Men koden ser ut såhär:

PHP:
1:
 
2:
<?php
3:
echo '<table><tr><td>';
4:
$result mysql_query('SELECT * FROM meddelanden ORDER BY id DESC');
5:
while($row mysql_fetch_assoc($result)) {
6:
   echo "<b>Meddelande #" $row['id'] . "</b><br />";
7:
   echo nl2br(htmlentities($row['meddelande'])) . "<br />";
8:
}
9:
mysql_free_result($result);
10:
echo '</td></tr></table>';
11:
?>
12:
 


Bara om du kan ändra så man kan ta del av din kod =)


Jag är nyfiken på vad du vill? Ta del av mitt mer avancerade filter? Vilken kod? Vad vill du ta del av?

För vill du ta del av mitt mer avancerade filter html-kod så kommer du få problem. Jag har kodat några sådana tidigare, men dom har varit väl inbakade i validatorklasser, samt varit beroende av andra delar av applikationen. Dels så hittar jag dom inte nu.

Men denna guide handlar inte om hur man ska göra, denna guide handlar om hur man inte ska göra, och vad man ska tänka på. Få upp ögonen för säkerhet.

Försök gärna koda detta filter själv om du behöver. Det ger en bra utmaning som man lär sig mycket på. Du kan få hjälp på vägen genom att fråga i PHP-forumet, och när du är klar är det välkommet att skriva ut i Tips & Trix så andra kan ta del av det du kodat.
 

_________________
"Question everything. Never trust propaganda. Keep on hacking." - Phrack
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget Gå till sida Föregående  1, 2, 3 ... 8, 9, 10, 11  Nästa
PHPportalen Forum Index » PHP
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic