- Android alkalmazások - szoftver kibeszélő topik
- Megjelent a Poco F7, eurós ára is van már
- Milyen okostelefont vegyek?
- Samsung Galaxy A54 - türelemjáték
- Telekom mobilszolgáltatások
- Yettel topik
- Apróbb óra érkezik a OnePlustól
- Red Magic 10 Air - gaming telefon is lehet kecses
- Friss koncepciót hoz a Nothing Phone (3)
- Azonnali mobilos kérdések órája
Aktív témák
-
faster
nagyúr
Hát úgy, hogy ha a register_globals be van kapcsolva, akkor ugyanazt a paraméter, amit elérsz mondjuk $_SESSION['valami'], vagy $_COOKIE['valami'] néven, azt látod globális változóként is, tehát úgy, hogy $valami. Ezek mind ugyanarra a változóra mutató referenciák, tehát ha felülírod az egyiket, akkor felülíródik a másik is.
[Szerkesztve] -
Tyrael
senior tag
ugy, hogyha register_globals on, akkor minden get, post, session, cookie ['valami'
valtozo letrejon mint $valami
es ha nem vigyazol a nevvalasztassal, akkor siman felulirhatjak egymast.
ezert erdemes a valtozoidra $_SESSION[] $_GET $_POST $_COOKIE tombokon keresztul hivatkozni, vagy kikapcsolni a register_globals-t
Tyrael -
PGee
tag
Ez a dolog egyre érdekesebb.
A kód (ez az includolt send_blog.php elején van, na jó van előtte egy if is, és annak az igaz ágában van ez):
echo ''user: ''.gettype($_SESSION['user').''<br>'';
echo ''blog: ''.gettype($_SESSION['blog').''<br>'';
echo ''action: ''.$action.''<br>'';
switch($action)
{
case ''new'':
{
$title = '''';
$sum = '''';
$blog = '''';
$id = -1;
}break;
case ''edit'':
{
$_SESSION['blog'->GetEntry($_GET['id'
);
if($_SESSION['blog'->entry['author_id'
!= $_SESSION['user'
->user_id)
{
die(''Hozzáférés megtagadva!'');
}
$entry = $_SESSION['blog'->GetOnlyText();
$title = $entry['title';
$blog = $entry['blog';
$sum = $entry['summary';
$action = ''update'';
}break;
case ''update'':
{
$_SESSION['blog'->UpdateBlog($_POST['title'
,$_POST['sum'
,$_POST['blog'
,$_POST['id'
);
echo ''Frissítve!'';
PrintBack(2);
}break;
}
echo ''user: ''.gettype($_SESSION['user').''<br>'';
echo ''blog: ''.gettype($_SESSION['blog').''<br>'';
Az eredmény:
user: object
blog: object
action: new
user: object
blog: string
Na emberek, ez vajon hogy jött össze??? hogy lett hirtelen objectből, string??? A nap kérdése... -
loszerafin
senior tag
Az alapkérdés, mit, mi ellen, milyen ráfordítással akarsz védeni.
Ha ez megvan, utánanézhetsz az adott problémát megoldó technológiáknak.
Válasz helyett újabb kérdés
Semennyire, ha azt írod ki:
Eddig X db session-t számoltam össze.
Mit akarsz számolni? látogatókat, látogatásokat, egyedi látogatókat?
esetleg vmi mást? -
loszerafin
senior tag
..., igazából nem nagyon tudom, hogy milyen védelemmel kéne ellátni a honlapomat...
Tedd fel pontosabban a kérdést:
a, mit akarsz védeni:
- A webservered
- webserveren levő php és html kódodat
- a tárolt adatokat
- a felhasználóid személyes adatait
b, mi ellen akarsz védekezni
- php és html kód rongálása
- adatlopás
- hw hiba miatti adatvesztés
- adatok összekeveredése
c, kik ellen
- saját magad
- userek
- crackerek
- webserver rgazdája -
cucka
addikt
jelszavakat pedig illik titkosítani az adatbázisban, egyrészt nem illik nézegetni az emberek jelszavait, másrészt ha illetéktelennek sikerül belenézni az adatbázisba, ne lássa azokat.
utánanéztem, md5-öt valóban sikerült ''feltörni'' - adott hash kulcsra viszonylag gyorsan találtak egy stringet, aminek megegyezik a kulcsa. [link]
a gond vele, hogy 1- így is rettenetesen lassú 2- ha jól értem, az eredmény string hossza változhat, itt pedig megbukott a dolog. átlagos felhasználásra valószínüleg elég az md5, lásd php.net-en az md5 függvény leírását, ott pedig tommiboy nevű júzer kommentjét
sql injectionról meg google, hatékony védekezés elvileg a program összes bemenő adatának alapos ellenőrzése. Pl itt egy oldal, ami egész jól elmagyarázza, de elég sok helyen foglalkoznak a témával. [link]
[Szerkesztve] -
cucka
addikt
1. az algoritmust úgy tervezték, hogy egyedi legyen. nyilván lehet 2 szövegnek ugyanaz az md5 hash-e, de ennek valószínűsége elég kicsi [link]
2. ennyire könnyen olvasható: af979eb3d5b7c21b755d14090b0677ba
(ez az md5('PGee') eredménye)
a legjobb egyébként, ha nem nagyon olvasgatja túl sok ember az adatbázis tartalmát -
Tele von Zsinór
őstag
A másodikkal keztem: biztonságos, mert ilyenkor csak egy asszem 20 karakteres sessionID tárolódik a felhasználónál, a sessionváltozók a szerveren vannak, általában fileokban, amiket nem is lehet kívülről elérni. Ha vki csak úgy kilép, akkor a session egy idő után timeoutol, azaz érvényét veszti. Itt a ph!-n ez 55 perc, azaz ha belépsz, egy óráig nem csinálsz semmit, akkor utána ha rányomsz egy linkre akkor már nem leszel bejelentkezve.
Az első: szerintem nem érdemes mysql kapcsolatot sessionban tárolni, hatékonyabb mindig újat nyitni oldal generálásakor. Persze azok az oldalak amiket eddig írtam nem bonyolítanak nagy forgalmat... -
faster
nagyúr
Mit keres ott az a Mozilla/4.0
Történelmi okai vannak ennek, a wikipedia leírásban a user agent spoofing részben le van írva. (Röviden: régen a Netscape volt az uralkodó böngésző, a user agent stringje Mozilla-val kezdődött, és volt jópár weboldal, amelyik Netscape-t azonosítva küldte csak ki a fejlettebb html kódot tartalmazó oldalszerkezetet a böngésző felé.)[Szerkesztve]
-
dulifiO
aktív tag
-
faster
nagyúr
A php.ini-ben a session.save_path -ot állítsd be egy létező könyvtárra, célszerűen a windows\temp-re. Nekem 5-ös PHP van, ebben automatikusan a rendszer temp könyvtárját használja, ha ez az opció nincs beállítva, de nem tudom, régebbi verziónál is így működik-e.
[Szerkesztve]
-
faster
nagyúr
A begépeld szövegben a sortörés egy enter karakterkód lesz. Ha te html tagok között kiiratsz egy bármilyen szöveget, az enterek nem fognak sortörésként megjelenni
(próbáld csak ki:
<p>első sor
második sor</p>
egy sorban fog megjelenni az eredmény)
, kivéve, ha <pre></pre> tagok közé rakod a szöveget. Emiatt kell az entereket <br> tagokra konvertálni, erre van egy függvény is, az nl2br.[Szerkesztve]
-
faster
nagyúr
Szokjatok le ezekről a mágikus globális változókról, egy csomó tárhelyszolgáltatónál a register_globals ki van kapcsolva, és ez erősödő tendencia. phpinfo() kiiratása hasznos ilyenkor.
Form submit után nincs olyan, hogy $enmezom, hanem $_GET[''enmezom''], $_POST[''enmezom''], vagy esetleg $_REQUEST[''enmezom''].
Cookie nem látszik úgy, hogy $encookiem, hanem $_COOKIE[''encookiem''].
Sessionváltozó nincs olyan, hogy $enyemsession, hanem $_SESSION[''enyemsession''].
File uploadnál nincs olyan, hogy $userfile, meg $userfile_ext, hanem van a $_FILES[''userfile''][''name''] meg $_FILES[''userfile''][''ext''] (Figyelem, többes szám! $_FILES)
Nincs olyan, hogy $PHP_SELF vagy $DOCUMENT_ROOT, van viszont helyette $_SERVER[''PHP_SELF''] és $_SERVER[''DOCUMENT_ROOT''].
Ezek a tömbök ráadásul ún. superglobal típusúak, bárhol, bármilyen függvényben vagy osztálymetódusban elérhetőek a global kulcsó használata nélkül is.
Tehát a te konkrét esetedben nincs olyan, hogy $elso, $nev, meg $PHP_SELF, hanem $_POST[''elso''], $_POST[''nev''] és $_SERVER[''PHP_SELF''].
[link]
[Szerkesztve] -
faster
nagyúr
'' de az már régen rossz, ha a php forrásaidat olvasgatja valaki.'' Oké, hogy így van, de mire mondtad?
Mit mire mondtam? Az ingyenes szolgáltatóknál nincs más megoldás, csak a plain text password (nem tudok más módszerről), és nincsenek webroot-on kívüli könyvtárak sem. Egyébként hogyan olvasná el bárki is a php forrásából a jelszót? A php forrását csak te látod, akinek van ftp elérése az adott tárhelyhez, ezt ne törjék fel, ez a lényeg. -
mr.geeZ
aktív tag
Egyik megoldás, hogy egy nem public könyvtárba belerakod az adatbázisműveleteket (linux szerver esetén pl. a htdocs feletti könyvtárba) és require paranccsal meghívod pl így:
require(''../include/db_actions.inc'');
Ezesetben az egyel feljebb lévő könyvtárszinten van egy include könyvtárad, ami kívülről nem elérhető, és abban egy fileod, amiben definiálhatsz olyan függvényeket, amiket utána abból a fileból, amiből require-oltad, szabadon hívogathatsz pl így:function connect() {
$servername = ''localhost'';
$link = mysql_connect($servername, 'user', 'pass');
if (!$link) {
die('Could not connect: ' . mysql_error());}
mysql_select_db(''databasename'');
return $link;
}
Majd meghívod a php fileodban (ahol van a require is) pl igy:if ($link=connect)
{adatbázismműveleteket csinájjá itten!;
}
else {
die('Could not connect: ' . mysql_error());}
[Szerkesztve]
Aktív témák
Hirdetés
- Autós topik
- Android alkalmazások - szoftver kibeszélő topik
- erkxt: A Roidmi becsődölt – és senki nem szól egy szót sem?
- Sorozatok
- Megjelent a Poco F7, eurós ára is van már
- A fociról könnyedén, egy baráti társaságban
- Linux kezdőknek
- Házimozi haladó szinten
- Milyen okostelefont vegyek?
- EA Sports WRC '23
- További aktív témák...
- GAMER PC RTX 3060 Ti 32GB RAM FULL HD / 1440p
- MSI Claw A1M 036 Konzol
- AKCIÓ!!! GAMER PC: Új i5-14400F +Új RTX 3080 +Új 16-64GB DDR4! GAR/SZÁMLA! 50 FÉLE HÁZ!
- HP Prodesk 600 G3 mini PC i5 7500T / WIFI / 8GB DDR4 / 256GB SSD / Type-C / 3x DP
- Dell Precision 7520, 15,6" FHD, I7-7820HQ, 16GB DDR4, 256GB SSD, M1200 4GB VGA, WIN 11
- Windows! Logitech Mx Keys Magyar!
- BESZÁMÍTÁS! ASRock B250 i5 7400 16GB DDR4 512GB SSD GTX 1660 SUPER 6GB Rampage Everest 500W
- Csere-Beszámítás!AMD Asztali számítógép PC Játékra! R5 5600/ RX 6700XT 12GB / 16GB DDR4 / 500GB SSD
- ÚJ Lenovo Legion Pro 5 16IRX9 - 16" WQXGA 165Hz - i5 14500HX - 32GB - 1TB - RTX 4060 - 3 év garancia
- Keresünk dokkolókat
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged