Új hozzászólás Aktív témák
-
sztanozs
veterán
válasz
cidalain #17795 üzenetére
illetve az egyszerű algoritmushoz legalább az kell, hogy
- a kis képek egyformák legyenek (pixelre)
- a kis képek egyformák egy sorban és oszlopban legyenek (szintén pixelre)
- a háttér színe ismert fix legyen
így egy scan-nel megállapítható a képek mérete és elhelyezkédésepersze rádobált, nem elforgatott téglalap alakú képeknél, ahol a kép nem olvad bele a háttérbe (kép határ legalább a szélén eltér a háttértól) egysével, soronként szkennelve kiszedhetők a képek. Persze nem egy gyors megoldás.
-
sztanozs
veterán
válasz
Sk8erPeter #17740 üzenetére
Egyébként nem biztos, hogy érdemes úgy keresni, hogy valaki ne csak komoly fejlesztő, hanem egyben jó rendszergazda is legyen...
Ja keresünk webfejlesztőt, aki majd üzemelteti a rendszereinket, feejlesztések közötti idejében recepciós (mert ugye az üzemeltetés csak mellékes foglalkozás, ha valami baj van), a munkaidő után pedig biztonsági őr.
mod: Ja nem is (2) - informatikust keresünk.
-
sztanozs
veterán
válasz
MineFox54 #17725 üzenetére
' (quote) - string
` (back quote) - field specifiertav előtt van, utána nincs
UPDATE reg SET `tav'='$tav', 'gender'='$gender', 'birthday'='$birthday', 'name'='$name', 'email'='$email', 'varos'='$varos', 'utca'='$utca', 'focinev'='$focinev', 'telefonszam'='$telefon', 'szamla'='$szamla', 'egyesulet'='$egyesulet' WHERE email='$email'
minegyik elé és utána kellene, vagy sehova se, ha nem használt foglalt nevet mezőnévhez
UPDATE reg SET `tav`='$tav', `gender`='$gender', `birthday`='$birthday', `name`='$name', `email`='$email', `varos`='$varos', `utca`='$utca', `focinev`='$focinev', `telefonszam`='$telefon', `szamla`='$szamla', `egyesulet`='$egyesulet' WHERE `email`='$email'BTW az angol és magyar mezőnevek keverése nagyon tré
Ja és remélem ellenőrzöd az inputokat! -
sztanozs
veterán
válasz
Peter Kiss #17547 üzenetére
A hash titkosítás, egyirányú.
-
sztanozs
veterán
válasz
MineFox54 #17348 üzenetére
Arra viszont számíts, hogy nem szükségszerűen lesznek ezek az ID-k szép egymás utánban (hosszabb használkat után). Rekordok törlése után ugyanis az adott ID-t többet már nem osztja ki a rendszer - nem rendezi újra a táblát, hogy törlés után is szép sorban legyenek az ID-k.
-
-
sztanozs
veterán
Szvsz attól, hogy hogy tárolod a session-t kliens oldalon (cookie / url / hidden form field) még ugyanúgy el tud tűnni a session a szerver oldali tárolóból. Valószínűleg szerver oldalon maximalizálva van a nyitott session-ök száma, ha ezt eléri, akkor a legrégebbieket a rendszer akkor is törli, ha te hosszább lejárati időt definiáltál. Esetleg az lehet megoldás, ha nem szerver default session menedzsmentjét használod, hanem te kezeled a session-t adatbázisba.
-
sztanozs
veterán
#17200 - PeachMan
Illetve akkor kellhet, ha túloldalon HTML-be lesz beillesztve (persistent XSS-t elkerülendő) - de akkor nem sima escape kell, hanem html encode. -
sztanozs
veterán
válasz
supercow #17073 üzenetére
Jó az oldal, amit linkeltél (bár több, mint két éves a cikk) - de továbbra is kitartok amellett, hogy a böngésző a leggyengébb szem a védelmi láncban. Amennyiben böngésző dekódol az egyetlen helyben tárolt kulccsal - itt az egyetlen probléma maga a böngésző - egyszerűen nincs lehetőség megfelelően "elzárni" a kulcsot, amit a kliens oldali kód használ.
Kicsit végiggondolva, akövetkezők használhatók a kulcs átadására (szerver és kliens oldal között):
1. Cookie, form fields, header fields - mindegyikkel az a gond, hogy bármelyik JS elérheti, amelyik be tud töltődni az oldal scope-ja alatt...
2. Javascript (non-global) hardcoded privát változó/konstans - ezzel az a gond, hogy cache-elődik a gépre és utólag kibányászható...
3. XHTTP Request http-only cookie-val, válasz (master password, titkosított jelszó adatbázis) privát változókba tárolva - ez talán legkevésbé kockázatos megoldás, így nem kell hardcode-olni a master hash-t és a jelszó adatbázist. az alábbi triviális támadási módok vannak ellene:
- Másik JS is tud egy XHTTP kérést küldeni és neki is elküldi a szerver a master hash-t/ jelszó adatbázist. Illetve másik JS is el tudja érni a privát változóink publikus interfészét, tudja hívogatni a metódusokat...
Digitálisan aláírt JS kikényszerítésével lehet esetleg védekezni ezek ellen.
- Böngésző JS debuggerén keresztül hozzá lehet férni a változókhoz (egyes beépülő modulok ezt is tudják kontrollálni) -
sztanozs
veterán
válasz
supercow #17071 üzenetére
Én "böngészó alapon" semmilyen jelszó manager eszközt nem készítenék. De ez lehet, hogy csak a saját hülyeségem.
Adatbázisban tárolva amúgy:
1. Adatbázisból user egyedi (user regisztrációkor random generált) salt lekérése
2. user login (master) jelszóból és lekért saltból egyedi jelszó készítése
3. a tárolt jelszó (be/ki) titkosítása az egyedi jelszóvalMásik megoldás lehet a PKI (publikus/privát kulcsok) használata titkosításra, ehhez kell valamiféle PKI infrastruktúra.
-
sztanozs
veterán
válasz
PumpkinSeed #16928 üzenetére
Tekintve, hogy vannak bonyolultabb dolgok is a login/reg rész megírásánál is érdemesebb lenne nem innen onnan összeollózott kódokból megcsinálni hanem magadtól írni egyet. - én inkább azt ajánlanám - amennyiben nem csak játszásiból kell, hanem publikálni is fogja (neadjisten pénzt is fizetnek érte) -, hogy ahelyett hogy maga megírná, inkább használjon egy működő login modult erre a célra.
-
sztanozs
veterán
válasz
honda 1993 #16926 üzenetére
-
sztanozs
veterán
válasz
honda 1993 #16922 üzenetére
reflected XSS hibák tömkelege
-
sztanozs
veterán
válasz
honda 1993 #16911 üzenetére
Azt első működő tesztverzió az utolsó verzió
-
sztanozs
veterán
válasz
honda 1993 #16907 üzenetére
Ráadásul az egyiket bejelentkezes-nek, a másikat registration-nek hívják...
-
sztanozs
veterán
válasz
Sk8erPeter #16793 üzenetére
Nincs helyi webszerver, csak egy HTA fájl a kliensgépen.
-
sztanozs
veterán
válasz
Sk8erPeter #16771 üzenetére
Nem szükségszerűen biztosítható az internetkapcsolat a gépen.
-
sztanozs
veterán
válasz
tothjozsi96 #16479 üzenetére
Valamint ha olyan dolgot szeretnél csinálni, ahol fontos az "egyedi" azonosítás, ott célszerű a session-t nem csak a session tickethez, hanem egyéb más tulajdonsághoz közni (pl ip cím), különben a cookie megszerzésével a belépő felhasználó más álltal megszemélyesíthető.
Kilépéskor a session változót invalidálni kell és mind kliens, mind szerver oldalon kötelezően le kell járani adott idejű inaktivitás után.Ja és akkor még szó sem esett a https-ről...
felhasználó id és md5 password tök fölösleges és veszélyes is - főleg ha nem secure cookie-ről van szó
-
sztanozs
veterán
válasz
DNReNTi #15942 üzenetére
Általában nem legális, de legtöbbször technikailag nem megakadályozható. Amúgy miért pont PHP-ban kell?
Hint: php crawler
-
sztanozs
veterán
válasz
Sk8erPeter #15928 üzenetére
Igen viszont a mysqli_stmt_fetch nem array-be pakol, hanem a
táblamezőneveknek megfelelő változókba (ami szerintem legalább akkora probléma, mint az összefűzött sql string).
Prepared-nél pedig nem találtam fetch_assoc-ot, ami az elvárható lenne. Persze ott van mysqli_stmt_bind_result, de hogy még azzal is sz@rakodni kelljen - főleg nagy számú mező esetén - na erre írtam, hogy nem akrtam előröl megírni az egészet - persze így is hamut szórok a fejemre (meg átkokat a php fejlesztőire, hogy miért nem lehet konzekvensen fejleszteni). -
sztanozs
veterán
válasz
Sk8erPeter #15918 üzenetére
Tudom, főtt is miatta a fejem
De hirtelen nem találtam procedurális példát, csak class alapút, és nem volt kedvem az egészet átírni osztály típusúra...Agony: Mi lenne ha megnéznéd a példámat és megpróbálbád megérteni? Pontosan azt csinálja, amit szeretnél.
-
sztanozs
veterán
Pl.
$timestamp = strtotime('09:00');
echo "<table border='1'>
<tr>
<th>Sorrend</th>
<th>Indulás ideje</th>
<th>Lovas neve</th>
<th>Ló neve</th>
<th>Edző neve</th>
<th>Egyesület neve</th>
<th>Nevezés ideje</th>
<th>Versenyszám</th>
</tr>";
$counter = 1;
mysqli_set_charset($con, "utf8");
$result_vsz = mysqli_query($con,"SELECT versenyszam FROM nevezesek WHERE verseny=1 GROUP BY versenyszam);
while($row_vsz = mysqli_fetch_array($result_vsz)) {
$result = mysqli_query($con,"SELECT * FROM nevezesek WHERE verseny=1 AND versenyszam = '".$row_vsz['versenyszam']."'");
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $counter . "</td>";
echo "<td>" . date('H:i', $timestamp) . "</td>";
echo "<td>" . $row['lovas'] . "</td>";
echo "<td>" . $row['lo'] . "</td>";
echo "<td>" . $row['edzo'] . "</td>";
echo "<td>" . $row['egyesulet'] . "</td>";
echo "<td>" . $row['nevezes'] . "</td>";
echo "<td>" . $row['versenyszam'] . "</td>";
echo "</tr>";
$counter++;
$timestamp += 120; //2 perc
}
$timestamp += 1800; //30 perc
}
echo "</table>"; -
sztanozs
veterán
válasz
TomyLeeBoy #15790 üzenetére
php-nál (lokális könyvtárak elérésére) ne használj http alapú fájlelérést. php hozzáfér a fájlrendszerhez, nem kell neki ilyesmi csicsa (amúgy sem úgy éred el böngészőből) - hacsak nem magán a szerveren nyitod meg az oldalt böngészőben, akkor nem a szerver lokális könyvtárára, hanem a saját géped c: és d: meghajtóira fog mutatni a link...
-
sztanozs
veterán
válasz
TomyLeeBoy #15788 üzenetére
PHP miért mint weboldalt akarná megnyitni egy lokális fájlt? Vagy valamit én nézek félre?
-
sztanozs
veterán
válasz
csabyka666 #14789 üzenetére
Táblákat összekapcsolni adatbázis szinten FOREIGN KEY Constraint-el tudsz.
Lekérdezés szinten pedig JOIN-nal tudsz összekapcsolni táblákat.A MySQL semmit nem old meg helyetted. Mind a táblákat, mind a lekérdezéseket neked kell elkészíteni.
-
sztanozs
veterán
válasz
PumpkinSeed #14601 üzenetére
Vagy miért nem a beolvasás során vizsgálod meg a karaktert? úgy nem kellene eltárolnod egy bazinagy tömbben...
-
sztanozs
veterán
válasz
Peter Kiss #14552 üzenetére
Ja és kifelejtetted a rossz SQL kérés logikát: rossz jelszóval is beenged, mivel csak a felhasználónevet ellenőrzi. Ja és még ott van az SQL injection is.
-
sztanozs
veterán
válasz
Peter Kiss #13447 üzenetére
Csak, hogy a topicból idézzek
-
sztanozs
veterán
válasz
Speeedfire #13396 üzenetére
Feltételezem, mivel a yii lekezeli már a kivételt, így semmivel nem tudod elkapni (kivéve a belehackelsz a framework-be).
-
sztanozs
veterán
válasz
Lacces #13371 üzenetére
A level++ lefele azért nem változik, mert miután átadta az értékét, utána növekszik egyel; így az egyel lejjebb levő szint is ugyanazt az értéket kapja meg. (Persze, ha jól feltételezem a level++ működését ebben az esetben - ha nem, akkor ugyanúgy működik, mint a ++level; amit azért kicsit kétlek).
++ működése általában
1)
a = 0;
b = a++; // b = 0; a = 1
c = a; // c = 12)
a = 0;
b = ++a; // b = 1; a = 1
c = a; // c = 1Counter - számláló - ahogy lerajzoltam rájöttem, hogy nem is igazi számláló, hiszen több elem kaphat ugyanolyan értéket. A probléma abban van, hogy a ++ megváltoztatja a változó értékét, és az azonos ágon levő leágazások nem ugyanazt az értéket kapják, hanem mind eggyel nagyobbat.
Branch - ág (ha fa struktúrában képzeljük el a felépített listát, akkor egy ág az, amiről bármi leágazik, és levél az, amiből már nem jön ki semmi) - a fenti ben már aszsem leírtam, hogy gondoltam... -
sztanozs
veterán
válasz
Vision #13366 üzenetére
Itt az eredmény (fejből, így hibázhat) a három változatra:
szintek l++ ++l l+1
+--a 1 1 1
| +--aa 1 2 2
| | +--aaa 1 3 3
| |
| +--ab 2 3 2
|
+--b 2 2 1
| +--ba 2 3 2
| | +--baa 2 4 3
| | +--bab 2 4 3
| | +--bac 2 4 3
| |
| +--bb 3 4 2
| | +--bba 3 5 3
| |
| +--bc 4 5 2
|
+--c 3 3 1
+--ca 3 4 2
+--cb 3 4 2 -
sztanozs
veterán
válasz
Peter Kiss #13363 üzenetére
Jade
Csupán csak két hszt kellett volna visszaolvasnom, hogy hogyan generálódik a struktúramondjuk ott el van b*va a kód, mert a rekurzív hívásnál nem jó a $level++, hanem $level+1 kell helyette. Azért nem találta a szintet, mert hülyeség volt a változóban
$feladat['sub'] = isset($feladat['sub']) ? $feladat['sub'] : GenerateArray($arr, $feladat['id'],$level++);
-
sztanozs
veterán
válasz
Lacces #13360 üzenetére
Bevezetsz még egy változót, pl $depth. Amúgy az UL helye szerintem a for cikluson kívül volna:
function GenerateNavHTML($nav, $depth = 0)
{
$html = '<ul>';
foreach($nav as $f)
{
$html .= '<li>';
$html .= '<a href="' . $f['feladat_kod'] . '">' . $f['rovid_nev'] . '</a>';
$html .= GenerateNavHTML($f['sub'], $depth + 1);
$html .= '</li>';
}
$html .= '</ul>';
return $html;
}Itt ugyan a $depth változó nincs felhasználva, de azt csinálhatsz vele amit akarsz.
-
sztanozs
veterán
-
sztanozs
veterán
válasz
Tele von Zsinór #12275 üzenetére
nem - úgy értettem, hogy nem statikus, hanem úgy hogy felhasználónként változó. Láttam én már olyan kódot - ami ahhoz hasonlított, amit itt valaki alant bemutatott:
pwhash = md5("valamirandomsalt".$_POST["pass"]);
Sőt olyat is láttam, hogy ugyan volt egy salt mező az adatbázis user_auth táblájában, de mind az összes rekord ugyanaz volt
De ilyenkor ugye - mivel a salt determinisztikus - simán lehet rá szivárványtáblát írni.Igazából nem is neked írom, mivel neked tiszta, hogy felhasználónként más érték legyen - de szerintem másnak nem szükségszerűen az: csak annyi a lényeg, hogy legyen salt...
-
sztanozs
veterán
válasz
Tele von Zsinór #12273 üzenetére
Igen, viszont tegyük hozzá, hogy a salt is csak akkor hatékony, ha nem statikus.
-
sztanozs
veterán
válasz
CSorBA #12065 üzenetére
Ez nem PHP hanem inkább javascript (azaz igazából egyik sem).
Az FQL egy HTTP GET alapú kérés, ami egy JSON formátumó stringet köp ki válaszként. Ezt elküldeni bármilyen nyelven el tudod és feldolgozni is bárhogy fel tudod.Amúgy a behivatkozott script nem működne, mivel az object_id numerikus típusú, te meg stringgel akarod megfeleltetni...
-
sztanozs
veterán
válasz
pvt.peter #12042 üzenetére
google, első találat...
-
sztanozs
veterán
válasz
Sk8erPeter #11787 üzenetére
Gondolom csak az avatarjaink miatt kevertél össze minket
-
sztanozs
veterán
Amit a felhasználó írhat be, az el is lesz írva... Láttam én már nagy adatbázisokat (neveket, címeket) a felhasználók (vagy akár az operátorok) által felvíve - rémálom volt. Hát ha még mezőnév is általuk definiálható, akkor kész az idegbaj. Persze nem most, majd pár száz/ezer rekord múlva
-
sztanozs
veterán
válasz
pvt.peter #11584 üzenetére
XSS ellen nem vééééd, de ... paraméterezett lekérdezés - és nem kell semmit ellenőrizni, escapelni és trükközni.
-
sztanozs
veterán
válasz
Peter Kiss #11500 üzenetére
+1 a paraméterezett lekérdezésre (hátha jobban rögzül)
-
sztanozs
veterán
--- bad place ---
-
sztanozs
veterán
$object_array = array();
while ($row = $query->fetch($result_set)) {
$object_array[] = self::instantiate($row);
}
return $object_array;Ez nem az alábbinak kellene legyen?
$object_array = array();
while ($row = $result_set->fetch(PDO::FETCH_OBJ)) {
$object_array[] = $row;
}
return $object_array; -
sztanozs
veterán
Reasons to strongly type parameters in PDO? - első válasz...
-
sztanozs
veterán
válasz
Tele von Zsinór #10545 üzenetére
A "salt".time() nem túl jó, inkább valami kriptografikailag megfelelő random kell: [link]
Új hozzászólás Aktív témák
Hirdetés
- BESZÁMÍTÁS! Lenovo ThinkPad X13 Gen 5 notebook - Ultra 5 135U16GB DDR5 512GB SSD Intel Graphics W11
- Bomba ár! Dell Latitude E6510 - i5-560M I 4GB I 250GB I DVD I 15,6" HD+ I Garancia!
- Akció! Újra Gamer EGEREK! Glorious , Endgamer XM1R , Nibio
- Több Lenovo Thinkpad x1 carbon gen 4 / 5 / 6 / 7 X1 Yoga gen3 6-9. gen i7, i5 procik
- Lenovo Thinkpad L14 Gen 4 -14"FHD IPS - i5-1335U - 8GB - 256GB - Win11 - 2 év garancia - MAGYAR
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest