Aktív témák
-
cucka
addikt
válasz
bLaCkDoGoNe #2941 üzenetére
rengeteg helyen lehet sql injection-ről olvasni, pl. [link] . ezen az oldalon pedig elmagyarázza, hogyan is történik egy hasonló támadás, ezt érdemes elolvasni, hogy megértsd, miről van szó: [link].
usernév/jelszó párosnak szerepelnie kell abban a file-ban, ahol mysql_connect-el csatlakozol az adatbázishoz. a cél, hogy ezt a file-t ne lehessen letölteni, megnézni kívülről. az egyszerű de teljesen megfelelő megoldás, hogy ez a file php kiterjesztésű, mert akkor a webszerver minden lekérésnél előbb átküldi a php parser-nek, a végeredményben pedig nyilván nem lesz benne. a bonyolult megoldás, ha a login adatokat tartalmazó filet a documentroot-on kívül teszed. -
paramparya
őstag
válasz
bLaCkDoGoNe #2941 üzenetére
SQL injection ellen elég annyit, hogy a lekérdezésbe kerülő változókra előtte ráeresztesz egy mysql_real_escape_string függvényt...
-
cucka
addikt
válasz
bLaCkDoGoNe #2939 üzenetére
1. magának az adattárolásra semmiféle komoly trükk nincs. adatbevitelnél szükséges az sql injection elleni védelem, az adatbázishoz szükséges usernév/jelszó elrejtése illetve az összes képernyőn megjelenő hibaüzenet kikapcsolása. ha nem te vagy az adatbázis szerver rendszergazdája, akkor többet nem tudsz tenni.
2. a védett oldal attól védett, hogy csak autentikáció után lehet megnézni, szerintem felejtsd el azt, hogy regisztráció során védett oldalakat mutogass. a user login részről többször volt már szó a topikban, tömören a lényeg: session-ök, ha a júzer sikeresen belépett, akkor a $_SESSION tömbben ezt eltárolni (illetve egyéb, júzerhez köthető adatokat, pl. milyen jogosultságai vannak, stb.). védett oldalak legelején pedig $_SESSION tömb ellenőrzése, és ha ez alapján kiderül, hogy nincs belépve a júzer, akkor átirányítás pl. a login oldalra. -
Jester01
veterán
válasz
bLaCkDoGoNe #2889 üzenetére
Mégis mit akarsz validálni egy email címen? Szerintem simán elég ha van benne pontosan egy darab @ és utána legalább egy pont ami nem a végén van. Az én atomegyszerű regexpem tehát ez lenne (remélem a fórummotor nem rontja el): ^[^@]+@[^@]+\.[^.@]+$
MOD: javítva
[Szerkesztve] -
cucka
addikt
válasz
bLaCkDoGoNe #2886 üzenetére
jó lenne látni, mi kerül pontosan az $email változóba, mondjuk irasd ki echo-val. (előtte és utána írj ki valami ellenőrző karaktert, hogy a space-eket is lássuk)
másrészt: a reg. kifejezésed nem működik a@aa.bb.hu alakú címekre. cserébe a@aabbhu címet jónak találja. -
Jester01
veterán
válasz
bLaCkDoGoNe #2886 üzenetére
Már megmondta Cucka, hogy az a regexp nagyon rossz.
-
paramparya
őstag
válasz
bLaCkDoGoNe #2884 üzenetére
Igen, de be copy-paste-elnéd ide a forrásból, ahol ott megjelenik?
Sztem ott lesz előtte egy space, ami nem fog tetszeni a regexp-ednek... -
paramparya
őstag
válasz
bLaCkDoGoNe #2882 üzenetére
Ez így nekem kicsit furcsa...
És hogy jelenik meg a legenerált html-ben? -
paramparya
őstag
válasz
bLaCkDoGoNe #2880 üzenetére
És másodjára (szerkesztésnél) az oldal forrásában a formban a textarea ''value'' mezőjében hogy szerepel?
-
cucka
addikt
válasz
bLaCkDoGoNe #2878 üzenetére
$email-ben pontosan mi található?
(az általad használt reguláris kifejezés egyébként nem jó) -
L3zl13
nagyúr
válasz
bLaCkDoGoNe #1737 üzenetére
Ha regexppel sem ment, akkor szvsz nem jól adtad meg a regexp kifejezést.
Ha úgy vizsgálod, hogy előtte utánna vesző legyen, akkor csak az első és utolsó tag esik ki.
Ezzel még egy sima like '%valami%' is megtalálná.
Kérdés: Megoldható-e, hogy vesszővel kezdődjön és vesszővel végződjön a label mező tartalma?
Arról meg ne is beszéljünk, hogy talán érdemes volna szétdarabolni a táblát két kissebb táblára, ahol az egyik tábla arra szolgálna, hogy a label mező egyes elemeit összekapcsolja a PID-del és így 1:N kapcsolat lehessen közöttük.
Utánna PHP-ből ha akarod újra összefűzheted őket vesszővel elválasztott stringgé. -
bLaCkDoGoNe
veterán
válasz
bLaCkDoGoNe #1426 üzenetére
#1426-ban levő kérdésem még mindig él, azzal a különbséggel, hogy elírtam a 1426-os hsz-ben, nem enum, hanem SET típusú mezőben vannak tárolva a címkeszámok.
-
chop
őstag
válasz
bLaCkDoGoNe #1426 üzenetére
Javitsatok ki, ha tevedek, de tudtommal az ENUM nem arra valo, hogy 50 fele ertek legyen benne, hanem arra, hogy egy fixen elore megadott ertekek kozul csak egy.
-
paramparya
őstag
válasz
bLaCkDoGoNe #1416 üzenetére
Nézd meg, van-e a php-ban truncate függvény, vagy ha nem, akkor substring-gel (substr, ha jól emlékszek), lásd php manual...
[Szerkesztve] -
faster
nagyúr
válasz
bLaCkDoGoNe #806 üzenetére
mivel nem csak a szöveghosszra kellene szűrni, hanem a sorok számára is; azaz a szöveg csak x sor hosszú lehet, mivel különben szétnyomja a designt.
Nehéz ügy, hiszen ha nincs br a szövegben, akkor is elérheti a hossza az 5 sort, a betűk szélessége pedig nem egyforma, pl. egy i sokkal keskenyebb, mint egy m betű, így a karakterek megszámolása sem igazán biztso módszer. Inkább alakítsd úgy a html-t, hogy ne nyomja szét a szöveg;
pl.:
<div style=''width: 400px; height: 300px; overflow:hidden''>szöveg...</div>
[Szerkesztve] -
vakondka
őstag
válasz
bLaCkDoGoNe #806 üzenetére
<BR> ek számlálására van egy tippem:
<?php
$lastkomment=''1<BR>2<BR>3<BR>4<BR>5<BR>'';
print ereg(''<BR>'',$lastkomment,$tomb);
print $tomb[0].''<br>'';
?>
Tehát a $tomb nulladik eleme fogja tartalmazni a <BR>-ek számát.
Sok sikert ! -
Tele von Zsinór
őstag
válasz
bLaCkDoGoNe #806 üzenetére
Hosszra talán az, hogy egy ciklussal megszámolod, hány \n vagy <br/> van benne. A többire egyelőre nincs ötletem.
-
VladimirR
nagyúr
válasz
bLaCkDoGoNe #764 üzenetére
jah, bocs, ha nem strtr-rel, hanem str_replace-vel csinalod, es ott sem tombbel, akkor ugyelni kell a sorrendre
eloszor a & jelet, aaztan a < > jeleket, es csak a legvegen csereld az entereket
nalad valszeg az tortent, hogy abban a sorrendben cserelted, ahogy fentebb irtam (igaz, szolnom kellett volna), igy elobb kicserelte az entereket <br /> sortoreseketre, majd a <br />-ekben levo < es > jeleket < es > karakterekre
en igy csinalom egyebkent:
$text = $_REQUEST["text"];
if ( !get_magic_quotes_gpc() ) $text = addslashes( $text );
$replace = array(
"&" => "&",
"\r\n" => "<br />",
"\r" => "<br />",
"\n" => "<br />",
"<" => "<",
">" => ">",
);
$text = strtr( trim( $text ), $replace );
az strtr fuggveny, ahhoz, amit egyszer mar lecserelt, tobbet nem fog nyulni
tehat ha lecsereli az entert ''<br />'' karakterekre, akkor a benne szereplo ''<'' es ''>'' jelekhez nem csereli le ujbol
esetleg ezt megelozoen a $text-valtozora meg raengedhetsz egy substr() fgv-t is, es levaghatod ugy 4-5000 karakterre
attol tobb ugys eleg (galeriaban kommentek lehet kevesebb is, nekem a vendegkonyvben annyi, de oda is sok), es igy legalabb nem lehet tobboldalas szarokkal flood-olni -
Tele von Zsinór
őstag
válasz
bLaCkDoGoNe #759 üzenetére
Hogy a másik kérdésre is választ kapj: célszerű úgy csinálni, hogy az oldal és az adatbázis kódolása ugyanaz, különben fura hibákat fogsz kapni, ?-ek meg egyéb értelmetlen karakterek formájában. Én az oldalam 7-8 php fileját megnyitottam notepadban és save as utf8 kódolással. Ennyi.
-
VladimirR
nagyúr
válasz
bLaCkDoGoNe #759 üzenetére
bevitelkor hajtsd vegre a kovetkezo csereket (str_replacs, strtr fuggvenyek valamelyike)
"&" => "&" // mindenfele spec karakterek kiszuresere
"\r\n" => "<br />" // enter-ek atralakitasa sortoresse
"\r" => "<br />" // ha nem xhtml, akkor sime "<br>"
"\n" => "<br />"
"<" => "<" // html kodok kiszuresere
">" => ">"
tovabba ajanlott a kovetkezot is vegrehajtani a bevivendo szovegen:
if ( !get_magic_quotes_gpc() ) $text = addslashes( $text );
ez annyit csinal, hogy bizonyos karakterek ele, amiknek szerepe lehet adatbazis-lekerdezesekben ( \, ', ", illetve a NULL ) betesz egy-egy backslash-t ( \ )
[Szerkesztve] -
faster
nagyúr
válasz
bLaCkDoGoNe #741 üzenetére
Tehát lapozásról lenne szó. Az ID nem folytatólagos, ha törlődnek rekordok, a max. ID-ből nem fogod tudni kikövetkeztetni, hogy hány darab rekord van az adott táblában. Azt egy
SELECT COUNT(*) FROM tablanev
szerű lekérdezéssel kapod meg. A mysql-ben a lapozást nagyon egyszerű megoldani, a lekérdezésnél meg tudod szabni, hogy hanyadik elemtől hány darab elemet akarsz visszakapni.
SELECT mezo1,mezo2,mezo3 FROM tablanev LIMIT 20,5
pl. azt csinálja, hogy a 20-ik elemtől a 25-ig adja csak vissza. A maximális elemszámból és abból, hogy egy oldalon hány darab elemet jelentítesz meg, ki lehet számolni, hány oldal van.
[Szerkesztve] -
faster
nagyúr
válasz
bLaCkDoGoNe #739 üzenetére
Ha viszont nem rögtön mented ki az ID-t, akkor könnyen eltévedhet a programod, ha egy másik processz is beszúr egy rekordot, ez webes programban pedig könnyen megeshet.
-
faster
nagyúr
válasz
bLaCkDoGoNe #737 üzenetére
Ez a megoldás jó, de plusz lekérdezést igényel. Milyen szervert használsz?
Szerk: Ja, csak most látom, mysql. Van egy függvény erre, mysql_insert_id().
PHP-ban így néz ki:
$id = mysql_insert_id();
[Szerkesztve] -
supercow2
csendes tag
válasz
bLaCkDoGoNe #734 üzenetére
pl. ''select azonosito from tabla order by azonosito desc limit 1;'' (mysql)
más db esetén van next_insert_id fv. -
faster
nagyúr
válasz
bLaCkDoGoNe #734 üzenetére
Adatbázis-szerver függő.
-
Tele von Zsinór
őstag
válasz
bLaCkDoGoNe #675 üzenetére
$ip=(getenv(HTTP_X_FORWARDED_FOR))?
getenv(HTTP_X_FORWARDED_FOR):
getenv(REMOTE_ADDR);
Remélem most jó lesz.
VladimiR: úgy tapasztaltam, hogy néhány szolgáltatónál a remote_addr nem adja vissza az IP-t azért írtam ezt, ez nekem eddig mindig működött. -
Tele von Zsinór
őstag
válasz
bLaCkDoGoNe #672 üzenetére
Az én oldalam minden oldallekérésnél naplózza az IP-t, meg még sok egyéb dolgot ;)
$ip=(getenv(HTTP_X_FORWARDED_FOR))?getenv(HTTP_X_FORWARDED_FOR):getenv(REMOTE_ADDR);
mod: Amit te írtál, az nem minden esetben helyes, de ez mindig jó IP-t ad vissza.
[Szerkesztve] -
bLaCkDoGoNe
veterán
válasz
bLaCkDoGoNe #672 üzenetére
Megtaláltam. Vagyis találtam egy ilyet: $_SERVER['REMOTE_ADDR'
, ez használható erre?
-
VladimirR
nagyúr
válasz
bLaCkDoGoNe #670 üzenetére
megeshet, hogy a php.ini-ben (nagyon helyesen) ki van kapcsolva a register_globals, es a tovabbiakban nem fog letrejonni a $valami valtozod, es csak $_GET[''valami''
-kent tudsz ra hivatkozni
Aktív témák
Hirdetés
- Xiaomi Redmi Note 14 Pro 5G 256GB, Kártyafüggetlen, 1 Év Garanciával
- LG UltraWide 29WQ60A-B LED IPS Monitor! sRGB 99% / 5ms / 100Hz / FreeSync
- Honor 400 Lite 256GB, Kártyafüggetlen, 1 Év Garanciával
- LG UltraWide 34WR50QC-B Monitor! VA 3440x1440 / 100Hz / FreeSync
- FÓLIÁS! LG 32MR50C-B ívelt VA Monitor! 100Hz / FreeSync / 5ms
- Csere-Beszámítás! Asus Rog Strix RTX 3070Ti 8GB GDDR6X Videokártya!
- Csere-Beszámítás! RTX Számítógép játékra! I7 6700 / RTX 2060 6GB / 32GB DDR4 / 250SSD+500HDD
- Bowers/Wilkins Px7 S2 fejhallgatók
- Telefon felvásárlás!! iPhone 16/iPhone 16 Plus/iPhone 16 Pro/iPhone 16 Pro Max
- Apple iPhone 13 Pro , 128GB , Kártyafüggetlen
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest