WN

WN (https://www.wn.se/forum/index.php)
-   Nyheter (https://www.wn.se/forum/forumdisplay.php?f=3)
-   -   Bloggtopppen.se och SQL injection - Fin fil med alla users (https://www.wn.se/forum/showthread.php?t=1050616)

Jim_Westergren 2011-10-26 17:15

Att vänta tills användare loggar in och sedan konvertera är en dålig idé. Det kan dröja innan alla har loggat in. Bättre att konvertera allting på studs.

Captain Thailand 2011-10-26 17:15

Jim,

Applåder!

Jim_Westergren 2011-10-26 17:30

Här är den kod jag skrev för att göra detta. Hoppas den kan hjälpa andra.

<?php
echo "Startar konvertering ...<br><br>";

$sql_host = 'subdomän.domän.se';
$sql_database = 'name_of_db';
$sql_username = 'username';
$sql_password = 'password';
$sql_table_name = 'name_of_table';

// Ta en fras härifrån: https://api.wordpress.org/secret-key/1.1/salt/
$salt = "din fras kommer här";

$mysql_connect = mysql_connect($sql_host, $sql_username, $sql_password);
mysql_select_db($sql_database, $mysql_connect);

// Namn på kolumner nedan kan behöva korrigeras:
$result = mysql_query("SELECT username, password FROM ".$sql_table_name."");
while($row = mysql_fetch_array($result)) {
$new_hash = md5($salt.$row['password']);
mysql_query("UPDATE ".$sql_table_name." SET password = '".$new_hash."' WHERE username = '".$row['username']."'");
}
echo "Konverting klar";
?>

<pre>
Ändra nu följande:
-----------------------

Ändra din inloggning från:

if(md5($_POST['password']) == $password) {
// Inloggad
}

Eller liknande som du har till följande istället:

$salt = "din fras kommer här";
if(md5($salt.md5($_POST['password'])) == $password) {
// Inloggad
}

Radera sedan denna filen från servern!
</pre>

klein 2011-10-26 18:37

Gör backup på DBn innan man kör det här, så man kan rulla tillbaka om något går fel.

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20421665)
Här är den kod jag skrev för att göra detta. Hoppas den kan hjälpa andra.


<?php
echo "Startar konvertering ...<br><br>";

$sql_host = 'subdomän.domän.se';
$sql_database = 'name_of_db';
$sql_username = 'username';
$sql_password = 'password';
$sql_table_name = 'name_of_table';

// Ta en fras härifrån: https://api.wordpress.org/secret-key/1.1/salt/
$salt = "din fras kommer här";

$mysql_connect = mysql_connect($sql_host, $sql_username, $sql_password);
mysql_select_db($sql_database, $mysql_connect);

// Namn på kolumner nedan kan behöva korrigeras:
$result = mysql_query("SELECT username, password FROM ".$sql_table_name."");
while($row = mysql_fetch_array($result)) {
$new_hash = md5($salt.$row['password']);
mysql_query("UPDATE ".$sql_table_name." SET password = '".$new_hash."' WHERE username = '".$row['username']."'");
}
echo "Konverting klar";
?>

<pre>
Ändra nu följande:
-----------------------

Ändra din inloggning från:

if(md5($_POST['password']) == $password) {
// Inloggad
}

Eller liknande som du har till följande istället:

$salt = "din fras kommer här";
if(md5($salt.md5($_POST['password'])) == $password) {
// Inloggad
}

Radera sedan denna filen från servern!
</pre>


SimonP 2011-10-26 19:23

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20421660)
Att vänta tills användare loggar in och sedan konvertera är en dålig idé. Det kan dröja innan alla har loggat in. Bättre att konvertera allting på studs.

Visst kan man konvertera alla på en gång, nackdelen med att göra allt på en gång är att man måste stänga av sidan vid konverteringen. För mindre sidor är det inga problem men för större sidor så kan det bli en del downtime.

Ciffan 2011-10-26 19:26

Visst ska man ha "bra" lösenord men är dåliga lösenord verkligen det största problemet?
Det spelar väl ingen roll om jag har
XMdfpfvew :_5ghtj)KFHJFHN &%()€=#/FTY€)JFMWofe
om jag har samma på alla ställen? Kommer det ut på ett ställe (vilket det kommer förr eller senare) så är jag ju rökt överallt.

Att skratta åt dem som hade enkla lösenord på Bloggtoppen är väl också att skjuta fel - om de har olika på alla ställen och "säkra" på känsliga/viktiga platser, so what?

Att jag reagerar är att jag fått mejl från ett par kunder som är oroliga och undrar över sina lösenord - vill att jag ändrar på alla deras platser till ett (1) säkert som de kopierat från en tidning.

Visst vi kan kräva att webbplatser har en säker hantering av användaruppgifter men ska vi vara ärliga så är det väl bara en tidsfråga innan vi ser nästa databas dump. Med det inte sagt att vi ska göra vad vi kan för att skydda användare.

Adestro 2011-10-26 19:27

Citat:

Ursprungligen postat av SimonP (Inlägg 20421683)
Visst kan man konvertera alla på en gång, nackdelen med att göra allt på en gång är att man måste stänga av sidan vid konverteringen. För mindre sidor är det inga problem men för större sidor så kan det bli en del downtime.

Med lite planering är det löst ganska smärtfritt. Förhoppningsvis sker ju inte utveckling mot produktionsmiljö.

SimonP 2011-10-26 19:30

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20421665)
Här är den kod jag skrev för att göra detta. Hoppas den kan hjälpa andra.

<?php
echo "Startar konvertering ...<br><br>";

$sql_host = 'subdomän.domän.se';
$sql_database = 'name_of_db';
$sql_username = 'username';
$sql_password = 'password';
$sql_table_name = 'name_of_table';

// Ta en fras härifrån: https://api.wordpress.org/secret-key/1.1/salt/
$salt = "din fras kommer här";

$mysql_connect = mysql_connect($sql_host, $sql_username, $sql_password);
mysql_select_db($sql_database, $mysql_connect);

// Namn på kolumner nedan kan behöva korrigeras:
$result = mysql_query("SELECT username, password FROM ".$sql_table_name."");
while($row = mysql_fetch_array($result)) {
$new_hash = md5($salt.$row['password']);
mysql_query("UPDATE ".$sql_table_name." SET password = '".$new_hash."' WHERE username = '".$row['username']."'");
}
echo "Konverting klar";
?>

<pre>
Ändra nu följande:
-----------------------

Ändra din inloggning från:

if(md5($_POST['password']) == $password) {
// Inloggad
}

Eller liknande som du har till följande istället:

$salt = "din fras kommer här";
if(md5($salt.md5($_POST['password'])) == $password) {
// Inloggad
}

Radera sedan denna filen från servern!
</pre>

1. MD5 är dock inte en framtidsäker lösning, om man kostar på sig att skriva en ny inloggningsrutin tycker jag man bör byta till SHA256 eller en riktig KDF.

2. Saltet bör läggas efter lösenordet för att försvåra bruteforce

daniel_ 2011-10-26 19:52

Tyvärr fanns man med i databasen, men jag lyckades inte dekryptera mitt lösenord. Någon som har en uppfattning om hur svårt är det att få fram lösenordet om man använder "unika" ord som inte finns med i kända databaser?

Gustav 2011-10-26 20:19

Citat:

Ursprungligen postat av Timofey (Inlägg 20421569)
Ni skulle ha skickat till alla era medlemmar istället för att joina på en (stulen) databas från en konkurrerande verksamhet.
!

+1

(tio tecken)


Alla tider är GMT +2. Klockan är nu 18:29.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson