GTA Közösség - A magyar GTA fórum

Multi Theft Auto (MTA) => MTA: Szerverfejlesztés => Segítségkérés => A témát indította: Somax02 - 2017. Június 26. - 08:30:34

Cím: SQL érték megváltoztatása
Írta: Somax02 - 2017. Június 26. - 08:30:34
Sziasztok!
 
Van egy bejelentkező panelem és, ha bejelentkezel és mondjuk változik a pénzed akkor az SQL - ben is meg kell változnia a pénzednek. Ahhoz, hogy megváltozzon az SQL - ben kell egy felhasználónév. 
 



   
      mysql_query(Database, \"SELECT * FROM `accounts` WHERE `Username` = \'\"..Username..\"\'\")
   

[/quote]
 
A Username - et, hova/mibe érdemes lementeni, illetve mibe biztonságos?
Cím: SQL érték megváltoztatása
Írta: thegergo02 - 2017. Június 26. - 11:50:47
Idézetet írta: Somax02 date=1498458634


   
       
   
   
      A Username - et, hova/mibe érdemes lementeni, illetve mibe biztonságos?
   


A jelszót titkosítani, de ne felhasználónévről keress. Hanem AI val csinálj egy id oszlopot, és csak egyszer a felhasználónévvel lekéred azt az ID-t majd elementDatázod. Aztán:
 

mysql_query(Database, \"SELECT * FROM `accounts` WHERE `id` = \'\"..getElementData(telefonrol nem tudom a szintaxist)..\"\'\")

 
//telo
Cím: SQL érték megváltoztatása
Írta: Somax02 - 2017. Június 26. - 11:54:21
Rendben! Köszönöm szépen a választ, ezzel sokat segítettél!
Cím: SQL érték megváltoztatása
Írta: asdpudingasd - 2017. Június 27. - 17:41:03
https://www.w3schools.com/SQL/sql_update.asp
Ezen az oldalon megtalálod a választ a kérdésedre
 
 
Cím: SQL érték megváltoztatása
Írta: thegergo02 - 2017. Június 30. - 14:00:30
Idézetet írta: asdpudingasd date=1498578063


   
      https://www.w3schools.com/SQL/sql_update.asp
      Ezen az oldalon megtalálod a választ a kérdésedre
   
   
       
   


Neki nem ez volt a kérdése.
Cím: SQL érték megváltoztatása
Írta: MakroBox - 2017. Július 23. - 17:03:56
Nah.. Csak kérlek (!!!!), nagyon szépen kérlek (!!!!!!!!!!!), ne használj string-összevonást (nem tudom, hogy hívjam magyarul, de: ..-öt), mert előbb-utóbb olyan SQL injektált szervered lesz, hogy szép lesz nézni. Nézz majd utána.. Én dbQuery()-t használok, ott is stringben kell megadni a \"parancsot\", és utána a paramétereket.
 
Nézzünk egy példát SQL injektálásra:A kód:
 

myQuery = dbQuery(connection, \"SELECT * FROM accounts WHERE name = \'\".. megadottNev .. \"\' AND pass = \'\".. megadottJelszo .. \"\' LIMIT 1)

 
Ha emberünk felhasználónévnek megad egy admin fiókot (pl. MakroBox), (és jelszónak egy 1\' OR \'1\' = \'1), akkor a query így fog kinézni:
 

myQuery = dbQuery(connection, \"SELECT * FROM accounts WHERE name = \'MakroBox\' AND pass = \'1\' OR \'1\' = \'1\' LIMIT 1)

 
Azaz megtalálja azokat a sorokat, ahol a felhasználónév MakroBox, és a jelszó 1, VAGY 1 = 1 (AMI MINDIG IGAZ!!), azaz meg fogja találni a MakroBox accountot, és átenged.
 
Nem tudom, hogy ez hogyan működik mysql_query-nél, de az 90%, hogy ott sincs kivédve az injektálás, és valamilyen ilyesmi dolgot kell alkalmazni.
 
Cím: SQL érték megváltoztatása
Írta: id100 - 2017. Július 23. - 17:08:28
MTASA-ban nincs SQL injection, mielőtt lefutna csinál rajta tisztítást. (Wiki)
Cím: SQL érték megváltoztatása
Írta: MakroBox - 2017. Július 23. - 17:10:39
Idézetet írta: id100 date=1500822508


   
      MTASA-ban nincs SQL injection, mielőtt lefutna csinál rajta tisztítást. (Wiki)
   


Áá, az remek..
Egy linket azért küldesz, hogy ránézzek?
Cím: SQL érték megváltoztatása
Írta: id100 - 2017. Július 23. - 18:00:22
DBQuery functionnak van a leírásába.
 
Mi kipróbáltuk, nem működött az injection.
Cím: SQL érték megváltoztatása
Írta: AlexSwamp - 2017. Július 23. - 21:52:45
Idézetet írta: id100 date=1500825622


   
      DBQuery functionnak van a leírásába.
   
   
      Mi kipróbáltuk, nem működött az injection.
   


Akkor nem jót próbáltatok!  
Cím: SQL érték megváltoztatása
Írta: MakroBox - 2017. Július 23. - 22:07:26
Idézetet írta: AlexSwamp date=1500839565


   
      Akkor nem jót próbáltatok!  
   


Akkor jól tudtam.. 
Cím: SQL érték megváltoztatása
Írta: id100 - 2017. Július 24. - 01:19:00
Pedig ugyanezt próbáltuk amit leírt ide az előbb hogy ilyet ne :)
Cím: SQL érték megváltoztatása
Írta: Somax02 - 2017. Július 24. - 07:48:51
Idézetet írta: MakroBox date=1500822236


   
      Ha emberünk felhasználónévnek megad egy admin fiókot (pl. MakroBox), (és jelszónak egy 1\' OR \'1\' = \'1)
   


Ez akkor sem biztonságos, hogyha amikor bejelentkezik a jelszót kódolja md5, sha256 stb - be?
Cím: SQL érték megváltoztatása
Írta: thegergo02 - 2017. Július 24. - 09:04:13
Idézetet írta: id100 date=1500825622


   
      DBQuery functionnak van a leírásába.
   
   
      Mi kipróbáltuk, nem működött az injection.
   


Én nem találom.
Cím: SQL érték megváltoztatása
Írta: Somax02 - 2017. Július 24. - 09:12:39
https://wiki.multitheftauto.com/wiki/ExecuteSQLQuery
 



   
      (SQL injection is rendered impossible)
   

[/quote]
 
ExecuteSQLQuery nincsen injection. Mysql_query - nél van injection, én is kipróbáltam valóban működik. Viszont azt nem tudom, hogy hogyan tudnám elkerülni.
Cím: SQL érték megváltoztatása
Írta: MakroBox - 2017. Július 24. - 10:46:36
Idézetet írta: Somax02 date=1500875331


   
      Ez akkor sem biztonságos, hogyha amikor bejelentkezik a jelszót kódolja md5, sha256 stb - be?
   


Hogyha a jelszó kódolva van.. akkor igen, mert ugye az 1\' OR \'1\' = \'1 be lesz kódolva egy MD5-kódba.. De loginon kívül is, ha tudod, kerüld el ezeket! 
Cím: SQL érték megváltoztatása
Írta: MakroBox - 2017. Július 24. - 10:48:45
Idézetet írta: Somax02 date=1500880359


   
      https://wiki.multitheftauto.com/wiki/ExecuteSQLQuery
   
   
      ExecuteSQLQuery nincsen injection. Mysql_query - nél van injection, én is kipróbáltam valóban működik. Viszont azt nem tudom, hogy hogyan tudnám elkerülni.
   


Nem tudom, hogy ott hogyan van.. de ajánlom a dbQuery-t, ott ha utólag adod meg a paramétereket (pl. name = ?\', name), akkor nem injektálható, én ezt használom. (https://wiki.mtasa.com/dbQuery)
 
Ha ez a mysql_query-t PHP-ban szeretnéd használni, akkor nincs ötletem. 
Cím: SQL érték megváltoztatása
Írta: Somax02 - 2017. Július 24. - 10:51:12
Köszönöm a segítséget! Viszont szerintem az is megoldás, ha ezt használom. 



   
      if (string.find(Username, \";\", 0)) or (string.find(Username, \"\'\", 0)) or (string.find(Username, \"@\", 0)) or (string.find(Username, \",\", 0)) or (string.find(Username, \'\"\', 0)) or (string.find(Username, \"=\", 0)) then
   

[/quote]
 
 
Cím: SQL érték megváltoztatása
Írta: MakroBox - 2017. Július 24. - 10:56:42
 
 
Idézetet írta: Somax02 date=1500886272


   
      Köszönöm a segítséget! Viszont szerintem az is megoldás, ha ezt használom. 
   
       
   


Nem rossz, anno PHP-ban ezt használtam JavaScript kivédésére.. Egyszer egy (szerencsére) etikus hacker ilyen névvel regisztrált be: <script>alert(\'Biztonsági hiba.\');</alert> ha jól emlékszem. Mivel az SQL átfutott az összes felhasználón belépéskor, ez a kód lefutott, így minden belépő látta, hogy biztonsági hiba.. 
 
Utána a Te megoldásoddal kivédtem, de nem a legjobb az a sok if, terheli a szervert is, minden belépéskor. Meg mivel az SQL-ből kérsz le, ne felejtsd el megcsinálni, hogy 5 másodpercenként lehessen belépni, mert különben floodolja az SQL-t, oszt easy DoS (xD) VAGY mikor elindul a szeró, lemented, hogy mi van SQL-ben, majd regnél hozzáadod a betegisztrált embert.. egy SQL-lekérés, egy INSERT INTO. 
 
 
Cím: SQL érték megváltoztatása
Írta: id100 - 2017. Július 24. - 11:43:19
PHP-ba PDO inkább mint mysqli :)
Cím: SQL érték megváltoztatása
Írta: MakroBox - 2017. Július 24. - 11:45:16
Idézetet írta: id100 date=1500889399


   
      PHP-ba PDO inkább mint mysqli :)
   


Van benne valami. 
 
(Az anno 4 éve volt.. :p)
Cím: SQL érték megváltoztatása
Írta: AlexSwamp - 2017. Július 24. - 16:27:47
Idézetet írta: id100 date=1500851940


   
      Pedig ugyanezt próbáltuk amit leírt ide az előbb hogy ilyet ne :)
   


Jó közben olvastam, hogy erre értetted. Az elvileg nem megy, úgy tudom, de más inject ellenben igen (én meg másra értettem a mondandóm).