Szerző Téma: [MYSQL] UCP / WEBOLDAL v0.1  (Megtekintve 10111 alkalommal)

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #30 Dátum: 2013. Május 22. - 22:16:31 »
+3 Show voters
Lenne 1-2 szakmai észrevételem ha megengeded.
Nagyon sok helyen látom ezt:
 
\"...= \'$_SERVER[REMOTE_ADDR]\' WHE...\"

 
Ilyen formát nem szoktunk használni. Helyette:
 
\"...= \'\".$_SERVER[\'REMOTE_ADDR\'].\"\' WHE...\"

 
Ez a kód idõtállósága miatt fontos. Az elõbbi kódrészlet hivatalosan nincsen, és bár még (ebben a verzióban) mûködik, nem tudjuk meddig.
Ez minden asszociatív (nem számmal indexelt) tömbnél fontos. Nincs $tomb[elem] csak $tomb[\"elem\"] vagy $tomb[\'elem\'].


Még egy idõtállósági dolog (Kis biztonság is) . Ilyen MySql függvényeket nem használunk. Igen, régen csak ez volt és rengeteg minden ezzel van írva, de újabb fejlesztéseknél messzire elkerüljük. A jelenlegi stabil php verzió az 5.4 , ezek a MySql függvények amiktõl hemzseg a kód, a php 5.5-ben már hibaüzeneteket fognak dobni, (régi függvény, kéri hogy használj mást) a jövõben meg teljesen ki lesznek iktatva. Ajánlom: MySqli,PDO (Személy szerint a PDO-t preferálom, illetve nézz utána az elõkészített lekérdezéseknek, PDO és MySqli is támogatja.) A szimpla MySql függvények lecserélése a biztonsági kérdéseket is megvariálja. A mysql_query függvény nem tud egyszerre több parancsot végrehajtani (Pl. nem tudsz egyszerre kiválasztani értékeket és törölni valamit egy lekérdezésben, tárolt eljárások nélkül). A PDO/MySqli viszont igen, ezért azok veszélyesebbek. Természetesen erre is van megoldás. (Elõkészített lekérdezések)


Admin függvények egyáltalán nincsenek szûrve. Ez végzetes hiba. Egy laikus/\"bosszúvágyú\" admin bármit megtehet, ha pedig olyan is hozzáférhet a panelhez adminként aki egyébként a szerveren/egyéb helyen nem rendelkezik jogokkal akkor az kellemetlen. Igaz, amíg van mysql_query ami csak 1 lekérdezést küld kicsit nehezebb dolga van (nem töröl instant adatbázist), de tényleg nem kéne ennek a függvénynek ezt a hátrányát biztonsági elõnyként kezelni, pl. lekérések feltételeit meg lehet kerülni könnyedén.


Sok kimeneti hibaüzenet szintén nincsen ellátva szûréssel, így azokba gyilkos JavaScript kódokat lehet injectelni.
 
echo \"<div class=\'msgbox\'>$_GET[msg]</div>\";

 
http://www.php.net/manual/en/function.strip-tags.php
http://php.net/manual/en/function.htmlspecialchars.php
http://www.php.net/manual/en/function.htmlentities.php
Ezzel az ügyeskedéssel a weblapot nem lehet feltörni. Vagyis önmagában nem. Ezzel a módszerrel felhasználókat lehet lopni, anélkül hogy szerencsétlen xy egyáltalán ezt észlelné. (Természetesen nem fejtem ki :) ) Pontosítok. Csak (bejelentkezett) admin felhasználókat lehet lopni vele. Az admin felületrõl már beszéltünk. Nem egyszerû ezt sem megcsinálni, de meg lehet.


                  if(file_exists(\"pages/$_GET[p].php\"))
            {
               require(\"pages/$_GET[p].php\");
            }

 
Kritikus php/szerver sebezhetõségi hiba, beállításoktól függõen. Ezzel a módszerrel tulajdonképpen bármilyen fájlt be tudok ágyazni illetve lefuttatni a php motor segítségével. Mint említettem, ezzel a php.ini-tõl függõen még akár helyben beinjectelhetem magát a php-t és helyben módosíthatom a forrást. (Vagy azt csinálok vele amit akarok) Miután azt futtatok amit akarok, adatbázisom is van. Igen, ott van hogy \"pages/\" az elején illetve a \".php\" a végén, de ezek lényegtelen információk amiket csupán az url-hez fûzött összesen 6 karakterrel el is távolítottam, onnantól meg csak a szûretlen változó van. A file_exists csak azt nézi létezik-e a fájl. Nem érdekli hogy hol van. Ha túl nagy jogköre lenne a szerveren ennek az oldalnak akkor már a szervert lehetne kóstolgatni, onnan meg hátulról minden mást ami rajta van. (Pl. ha nem rendesen beállított hostolt környezetben fut az oldal.) Ez a sebezhetõség függ a php verziójától is. 5.3.4 elõtt azt hiszem veszélyesebb volt, a frissebb php-k mintha már figyelnek a kiterjesztés eltüntetésére, de még sok helyen van 5.3.3 sõt még 5.2 is. Igazából azt se szeretnéd ha bármely php fájl ami csak megtetszene beágyaznék.
Ajánlom hogy reguláris kifejezésekkel távolíts el a változóból mindent ami nem betû,esetleg szám.
Egy tömbben tárolhatod hogy milyen oldalak vannak (http://php.net/manual/en/function.scandir.php) és ha nem szerepel a tömbben a változó akkor ne jelenítsd meg az oldalt.
Stb...


Regisztrációnál nem ellenõrzöd az E-Mail cím valódiságát. Simán lehet tolni egy \"a@a\" semmiséggel egy felhasználót, ha rászánnék egy percet bármilyen más karakterlánccal is. A kliens oldali HTML5(ami nálad van)/JavaScript ellenõrzés nem valódi ellenõrzés.
Felhasználónév és jelszó hosszát ajánlom korlátozni. (Minimum/maximum)
Felhasználónévbe írható karaktereket ajánlom leszûkíteni betûkre/számokra.


Egy kis adatbázis tervezési észrevétel. Azoktól a nagybetûktõl az oszlop nevek nagyon menõn néznek ki meg minden. Kár hogy Windows/Linux kompatibilitási gondot okozhatnak.


Csak belenéztem a kódba, ezeket nem feltétlenül azért írtam hogy most azonnal javíts/írj át mindent vagy ilyesmi,ócsárolni sem volt szándékom, csupán szerintem ezeket a dolgokat hasznos tudni a jövõbeli projektjeid tervezésénél.

Nem elérhető b1s

  • 2212
  • Faszidegbénulás
    • Profil megtekintése
[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #31 Dátum: 2013. Május 29. - 20:13:27 »
+2 Show voters
Idézetet írta: TheClauss date=1369253791\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"37287\" data-ipsquote-contentclass=\"forums_Topic
Lenne 1-2 szakmai észrevételem ha megengeded.
Nagyon sok helyen látom ezt:
 
\"...= \'$_SERVER[REMOTE_ADDR]\' WHE...\"

 
Ilyen formát nem szoktunk használni. Helyette:
 
\"...= \'\".$_SERVER[\'REMOTE_ADDR\'].\"\' WHE...\"

 
Ez a kód idõtállósága miatt fontos. Az elõbbi kódrészlet hivatalosan nincsen, és bár még (ebben a verzióban) mûködik, nem tudjuk meddig.
Ez minden asszociatív (nem számmal indexelt) tömbnél fontos. Nincs $tomb[elem] csak $tomb[\"elem\"] vagy $tomb[\'elem\'].


Még egy idõtállósági dolog (Kis biztonság is) . Ilyen MySql függvényeket nem használunk. Igen, régen csak ez volt és rengeteg minden ezzel van írva, de újabb fejlesztéseknél messzire elkerüljük. A jelenlegi stabil php verzió az 5.4 , ezek a MySql függvények amiktõl hemzseg a kód, a php 5.5-ben már hibaüzeneteket fognak dobni, (régi függvény, kéri hogy használj mást) a jövõben meg teljesen ki lesznek iktatva. Ajánlom: MySqli,PDO (Személy szerint a PDO-t preferálom, illetve nézz utána az elõkészített lekérdezéseknek, PDO és MySqli is támogatja.) A szimpla MySql függvények lecserélése a biztonsági kérdéseket is megvariálja. A mysql_query függvény nem tud egyszerre több parancsot végrehajtani (Pl. nem tudsz egyszerre kiválasztani értékeket és törölni valamit egy lekérdezésben, tárolt eljárások nélkül). A PDO/MySqli viszont igen, ezért azok veszélyesebbek. Természetesen erre is van megoldás. (Elõkészített lekérdezések)


Admin függvények egyáltalán nincsenek szûrve. Ez végzetes hiba. Egy laikus/\"bosszúvágyú\" admin bármit megtehet, ha pedig olyan is hozzáférhet a panelhez adminként aki egyébként a szerveren/egyéb helyen nem rendelkezik jogokkal akkor az kellemetlen. Igaz, amíg van mysql_query ami csak 1 lekérdezést küld kicsit nehezebb dolga van (nem töröl instant adatbázist), de tényleg nem kéne ennek a függvénynek ezt a hátrányát biztonsági elõnyként kezelni, pl. lekérések feltételeit meg lehet kerülni könnyedén.


Sok kimeneti hibaüzenet szintén nincsen ellátva szûréssel, így azokba gyilkos JavaScript kódokat lehet injectelni.
 
echo \"<div class=\'msgbox\'>$_GET[msg]</div>\";

 
http://www.php.net/manual/en/function.strip-tags.php
http://php.net/manual/en/function.htmlspecialchars.php
http://www.php.net/manual/en/function.htmlentities.php
Ezzel az ügyeskedéssel a weblapot nem lehet feltörni. Vagyis önmagában nem. Ezzel a módszerrel felhasználókat lehet lopni, anélkül hogy szerencsétlen xy egyáltalán ezt észlelné. (Természetesen nem fejtem ki :) ) Pontosítok. Csak (bejelentkezett) admin felhasználókat lehet lopni vele. Az admin felületrõl már beszéltünk. Nem egyszerû ezt sem megcsinálni, de meg lehet.


                  if(file_exists(\"pages/$_GET[p].php\"))
            {
               require(\"pages/$_GET[p].php\");
            }

 
Kritikus php/szerver sebezhetõségi hiba, beállításoktól függõen. Ezzel a módszerrel tulajdonképpen bármilyen fájlt be tudok ágyazni illetve lefuttatni a php motor segítségével. Mint említettem, ezzel a php.ini-tõl függõen még akár helyben beinjectelhetem magát a php-t és helyben módosíthatom a forrást. (Vagy azt csinálok vele amit akarok) Miután azt futtatok amit akarok, adatbázisom is van. Igen, ott van hogy \"pages/\" az elején illetve a \".php\" a végén, de ezek lényegtelen információk amiket csupán az url-hez fûzött összesen 6 karakterrel el is távolítottam, onnantól meg csak a szûretlen változó van. A file_exists csak azt nézi létezik-e a fájl. Nem érdekli hogy hol van. Ha túl nagy jogköre lenne a szerveren ennek az oldalnak akkor már a szervert lehetne kóstolgatni, onnan meg hátulról minden mást ami rajta van. (Pl. ha nem rendesen beállított hostolt környezetben fut az oldal.) Ez a sebezhetõség függ a php verziójától is. 5.3.4 elõtt azt hiszem veszélyesebb volt, a frissebb php-k mintha már figyelnek a kiterjesztés eltüntetésére, de még sok helyen van 5.3.3 sõt még 5.2 is. Igazából azt se szeretnéd ha bármely php fájl ami csak megtetszene beágyaznék.
Ajánlom hogy reguláris kifejezésekkel távolíts el a változóból mindent ami nem betû,esetleg szám.
Egy tömbben tárolhatod hogy milyen oldalak vannak (http://php.net/manual/en/function.scandir.php) és ha nem szerepel a tömbben a változó akkor ne jelenítsd meg az oldalt.
Stb...


Regisztrációnál nem ellenõrzöd az E-Mail cím valódiságát. Simán lehet tolni egy \"a@a\" semmiséggel egy felhasználót, ha rászánnék egy percet bármilyen más karakterlánccal is. A kliens oldali HTML5(ami nálad van)/JavaScript ellenõrzés nem valódi ellenõrzés.
Felhasználónév és jelszó hosszát ajánlom korlátozni. (Minimum/maximum)
Felhasználónévbe írható karaktereket ajánlom leszûkíteni betûkre/számokra.


Egy kis adatbázis tervezési észrevétel. Azoktól a nagybetûktõl az oszlop nevek nagyon menõn néznek ki meg minden. Kár hogy Windows/Linux kompatibilitási gondot okozhatnak.


Csak belenéztem a kódba, ezeket nem feltétlenül azért írtam hogy most azonnal javíts/írj át mindent vagy ilyesmi,ócsárolni sem volt szándékom, csupán szerintem ezeket a dolgokat hasznos tudni a jövõbeli projektjeid tervezésénél.
 
Üdv!
Köszönöm a normális hangvételû hozzászólásod, egyáltalán nem vettem ócsárlásnak, vagy ilyesminek, igazad van. Az általad említett hibákat a következõ verzióban javítani fogom.

Nem elérhető instant

  • 2778
  • ZzzzzZ
    • Profil megtekintése
[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #32 Dátum: 2013. Június 02. - 16:18:04 »
0 Show voters
1 kérdés, a web_users-t ki szabad cserélni hogy a saját szerveren lévõ Játékosok adatait mutassa?
E: Megoldva..


Ha beregisztrálok azt elfogadja de amikor be akarok jelentkezni akkor azt írja : Nem létezik ilyen felhasználó név , miért?
« Utoljára szerkesztve: 2013. Június 02. - 16:33:22 írta ZzzzzZ »

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #33 Dátum: 2013. Június 12. - 12:31:26 »
+1 Show voters
És még csak most látom ezt elõször... örülök hogy Malibunál vagy, aranypofa. ; ) < 3

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #34 Dátum: 2013. Július 05. - 03:21:34 »
0 Show voters
Hálám üldözzön!!!:)

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #35 Dátum: 2013. Július 10. - 02:49:37 »
0 Show voters
A design nem rossz választás, viszont az oldal felépítését tekintve tényleg nem 100-as (Ne vedd bántásnak).
Ha van kedved és idõd ajánlom a mysqli használatát, mert sokkal gyorsabb, object orientált és támogatás is van rá, ellentétben a sima mysql-el függvénykönyvtárral.
session_start()-ot pedig mindig a forráskód elsõ sorában, vagy legalább is az elején használjuk elkerülendõ az esetleges hibákat.
Ha elnyeletést használsz (ob_start()-ot), akkor zárd is le ob_end_flush() függvénnyel.

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #36 Dátum: 2013. Augusztus 16. - 18:14:18 »
0 Show voters
Bocs,hogy újra életet leheltem e topicba de én ha regizek,amikor nem hoz létre egy accountot!

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #37 Dátum: 2013. Augusztus 21. - 10:12:31 »
0 Show voters
Szép lett Grat.

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #38 Dátum: 2013. Szeptember 26. - 15:23:40 »
0 Show voters
Ment a  :thumbsup: :) Szuper :yes:

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #39 Dátum: 2013. Szeptember 26. - 16:29:14 »
0 Show voters
Azosztigen!

Szép munka!


Gratula!

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #40 Dátum: 2014. Január 22. - 19:56:37 »
0 Show voters
Regeltem, de nem hoz létre felhasználót....Annak ellenére jó

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #41 Dátum: 2014. Január 26. - 06:24:25 »
0 Show voters
Nagyon, de nagyon szép munka.Gondolom, nemvagy már kezdõ ebben...le a kalappal. :)

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #42 Dátum: 2014. Augusztus 10. - 08:35:07 »
0 Show voters
Idézetet írta: krook date=1368377518\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"37287\" data-ipsquote-contentclass=\"forums_Topic


website v0.1

Elkészítettem egy weboldalt, amit publikálásra szántam.. Íme hát itt van!

Spoiler for Képek:


\"width=500http://s1.postimg.org/lt5oa1on3/web_146.png[/img]

\"width=500http://s1.postimg.org/skw3cwdmn/web_148.png[/img]

\"width=500http://s1.postimg.org/7cievgz5r/web_149.png[/img]

\"width=500http://s1.postimg.org/4wglhmh33/web_150.png[/img]

\"width=500http://s1.postimg.org/hcdbbdaf3/web_151.png[/img]

\"width=500http://s1.postimg.org/7ggtpgu0v/web_152.png[/img]

\"width=500http://s1.postimg.org/m0xwkaozj/web_153.png[/img]

\"width=500http://s1.postimg.org/52yvygflr/web_155.png[/img]

\"width=500http://s1.postimg.org/g3u13h7un/web_156.png[/img]

\"width=500http://s1.postimg.org/s6zcr1iwv/web_157.png[/img]

\"width=500http://s1.postimg.org/ooncuni0v/web_158.png[/img]

\"width=500http://s1.postimg.org/6n47wunzz/web_159.png[/img]

\"width=500http://s1.postimg.org/iq9jkez27/web_160.png[/img]

\"width=500http://s1.postimg.org/605b7br3z/web_161.png[/img]

Spoiler for Képek (KÓD):



 
http://s1.postimg.org/lt5oa1on3/web_146.png
http://s1.postimg.org/skw3cwdmn/web_148.png
http://s1.postimg.org/7cievgz5r/web_149.png
http://s1.postimg.org/4wglhmh33/web_150.png
http://s1.postimg.org/hcdbbdaf3/web_151.png
http://s1.postimg.org/7ggtpgu0v/web_152.png
http://s1.postimg.org/m0xwkaozj/web_153.png
http://s1.postimg.org/52yvygflr/web_155.png
http://s1.postimg.org/g3u13h7un/web_156.png
http://s1.postimg.org/s6zcr1iwv/web_157.png
http://s1.postimg.org/ooncuni0v/web_158.png
http://s1.postimg.org/6n47wunzz/web_159.png
http://s1.postimg.org/iq9jkez27/web_160.png
http://s1.postimg.org/605b7br3z/web_161.png

 



Amit tartalmaz


> Regisztráció / Bejelentkezés rendszer

> Profil

> Admin panel

       
> Hírek adminisztrálása

       
> Kitiltások kezelése

       
> Tulajdonosoknak admin adás menüpont

> Szerver mutató

> Csapat oldal

> Userbar




Felhasznált dolgok


> SA-MPQuery API




Letöltés

web.zip

web.rar

webpage.sql




 


Spoiler for SQL struktúra:


/*      Hírek      */
CREATE TABLE IF NOT EXISTS `web_news` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `TITLE` text COLLATE utf8_hungarian_ci NOT NULL,
  `CONTENT` text COLLATE utf8_hungarian_ci NOT NULL,
  `ADDED` text COLLATE utf8_hungarian_ci NOT NULL,
  `DATE` int(40) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci AUTO_INCREMENT=1 ;
/*   Felhasználók   */
CREATE TABLE IF NOT EXISTS `web_users` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `NAME` text COLLATE utf8_hungarian_ci NOT NULL,
  `PASS` text COLLATE utf8_hungarian_ci NOT NULL,
  `IP` varchar(20) COLLATE utf8_hungarian_ci NOT NULL DEFAULT \'0.0.0.0\',
  `GROUP` int(2) NOT NULL DEFAULT \'0\',
  `MONEY` int(90) NOT NULL DEFAULT \'0\',
  `KILLS` int(90) NOT NULL DEFAULT \'0\',
  `DEATHS` int(90) NOT NULL DEFAULT \'0\',
  `SCORE` int(90) NOT NULL,
  `EMAIL` text COLLATE utf8_hungarian_ci NOT NULL,
  `REGDATE` int(90) NOT NULL,
  `LASTONLINE` int(90) NOT NULL,
  `BANNED` int(1) NOT NULL DEFAULT \'0\',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci AUTO_INCREMENT=1 ;
 

[/spoiler



krook,le a kalappal elõtted!
« Utoljára szerkesztve: 2014. Augusztus 10. - 08:38:04 írta Mr_Jack »

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #43 Dátum: 2014. Augusztus 10. - 09:38:55 »
0 Show voters
Fel a kalappal!


:wall:
 
Amúgy jó lett grat :D
Mr_Jack, tudtommal régi témákhoz nem-igen kéne hozzászólni nem?  :unsure:


FONTOS!!
Akármilyen szép és jó, azért hiba az még van benne.. Próbáltad úgy letesztelni krook, hogy a settings.php-ben másik adatbázisnevet adsz meg? Hm, ugyanis a func.php-ben a regisztrációnál nem a settings.phpbõl importálja be a beállítást :confused:
 

function Register($user2, $pass2, $mail2) {
mysql_query(\"SET NAMES UTF8\");
$user = mysql_real_escape_string($user2);
$pass = sha1(mysql_real_escape_string($pass2));
$mail = mysql_real_escape_string($mail2);
$time = time();
$vane = mysql_num_rows(mysql_query(\"SELECT * FROM web_users WHERE NAME = \'$user\'\"));
if($vane == 0 && !empty($user2) && !empty($pass2) && !empty($mail2) ) {
   mysql_query(\"INSERT INTO `krukveb`.`web_users` (`ID`, `NAME`, `PASS`, `IP`, `GROUP`, `MONEY`, `KILLS`, `DEATHS`, `SCORE`, `EMAIL`, `REGDATE`, `LASTONLINE`, `BANNED`) VALUES (NULL, \'$user\', \'$pass\', \'$_SERVER[REMOTE_ADDR]\', \'0\', \'0\', \'0\', \'0\', 0, \'$mail\', \'$time\', \'$time\', 0);\");
   //mail($mail, \"Üdvözöllek!\", \"Szia $user!\\nEzt a mailt azért kapod mert regisztráltál a szerverre!\\n\\nNév: $user\\nÜdvözlettel: Valaki\"); # Ha támogatja az email küldést a szolgáltatód akkor vedd ki a //-t
   echo \'Sikeres regisztráció! Mostmár bejelentkezhetsz!\';
}
else {
   echo \'Valami üresen maradt, vagy már létezik a felhasználónév!\';
}
}

 
A querynél van, én most csak simán átállítottam, de oda php kéne :/
« Utoljára szerkesztve: 2014. Augusztus 10. - 10:20:17 írta Nukerdog »

[MYSQL] UCP / WEBOLDAL v0.1
« Válasz #44 Dátum: 2014. Augusztus 10. - 22:27:11 »
0 Show voters
Mr_Jack tudtommal régi  témákhoz nem-igen  kéne hizzászólni nem? :unsure:[/quote]
Pfff... Hol láttad ezt? Mert én a fórumon nem láttam ilyesmit... De most komolyan,jó páran hozzászóltak régi témákhoz,semmit nem kaptak   :noexpression:

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal