ugrás a tartalomhoz

MySQL-ből PHP kód futtatása... de hogyan?

Anonymous · 2006. Jún. 10. (Szo), 15.54
Sziasztok!

Arra lennék kíváncsi, hogy megoldható-e egy SQL táblából PHP kód beszúrása és végrehajtása egy HTML doksiban? Az a gondom, hogy rendben kiolvassa a táblából a PHP kódot, de végrehajtás nélkül beszúrja a HTML-be. Tulajdonképpen arre keresek megoldást, hogy a szóban forgó PHP kód végrehajtásra is kerüljön.

Előre is köszönettel!
 
1

eval()

vbence · 2006. Jún. 10. (Szo), 16.11
PHP dokumentáció:
eval() evaluates the string given in code_str as PHP code. Among other things, this can be useful for storing code in a database text field for later execution. code_str does not have to contain PHP Opening tags


Picit ködösen fogalmaztál... HTML szót nem tudom igazán mire vélni.
2

Köszönöm!

Anonymous · 2006. Jún. 10. (Szo), 16.43
Köszönöm szépen! Úgy néz ki, hogy ez lesz a megoldás. Most jelenleg úgy van megoldva a dolog, hogy az adatbázisból az adatokat az echo függvénnyel iratom ki az oldalra. Ha jól gondolom, akkor úgy kell megoldanom, hogy az echo-t eval-ra cserélem, és az adatbázisban minden kiíratni szánt tartalom elé echo-t írok?
3

rtfm

tiny · 2006. Jún. 10. (Szo), 17.05
Lehet csak én vagyok fáradt, de nem értem amit leírtál. Ez biztos segít:
Ezt olvasd el
4

Kb úgy.. (kattints ide)

vbence · 2006. Jún. 10. (Szo), 19.07
Igen amit leírtál az működik, de ez alapján (ha megbocsájtod) elég gyakorlatlan PHP forgatónak tűnsz.. Ez önmagában nem probléma, de ha hozzávesszük, hogy egy ilyen nagyon BIZARR megoldáast választasz egy problémára, én azt gyanítom, hogy van rá egyszerübb is.

Én csak akkor használnék ilyet, ha pl egy tárhelyen kvóta lenne a fájlokra, de a mysql-re nem :) Vagy valami nagyon Web2.0-ás össznépi PHP őrületet szervezel?
5

Biztonsági luk

janoszen · 2006. Jún. 10. (Szo), 19.23
Azért elég nagy biztonsági lukat nyitsz így, mert ha valakinek sikerül az SQL tábládba belevarázsolni valamit (injection támadás) akkor gyk bármit végre tud hajtani. Jobb lenne, ha a PHP kapna írásjogokat a tárterületre és figyelnél, hogy milyen fájlokba írsz.
6

Mi a célod?

Dualon · 2006. Jún. 10. (Szo), 21.26
Egyet kell értenem Proclubbal, az eval() használata nem a legszerencsésebb. Mi a célod? Hátha találunk rá valami más utat...
7

A célom:

Anonymous · 2006. Jún. 11. (V), 08.59
Tehát, adott egy SQL tábla, ebben 2 mező. Azonosítójuk: menu_id, content. Írtam egy egyszerű függvényt, amely lekérdezi egy adott menu_id-hez tartozó tartalmat és az echo függvénnyel kiírja. Az a probléma, hogy időközben lennének jelszóval védett oldalak is. Ilyenkor az echo-s kiíratás már nem működik, mert a PHP kód, amely ellenőrizné, hogy már belépett-e az illető, az simán kiíratásra kerül. Na ezt szeretném valahogy megoldani...
Az eval() biztonsági lyukkal tisztában vagyok, ezért is kéne valami kevésbé "drasztikus" megoldás.

Köszönöm, hogy ennyien reagáltatok rá, és igen, valóban a kezdők táborához tartozom.

Üdv.!
8

blokkolt tartalmak

erenon · 2006. Jún. 11. (V), 09.11
Nem vagyok MySQL profi, de a blokkolt tartalmak védelme nagyon egyszerű.
A táblád nézzen ki így: menu_id, content, jog
Lekérés előtt állapítsd meg a user 'jogát', ami egy szám, pl 3.
És a lekérés:
"SELECT content FROM table WHERE jog<='$jog' AND menu_id='$menu_id'";
9

Nem ez lesz a megoldás...

Anonymous · 2006. Jún. 11. (V), 09.31
Köszi, de ez sajnos nem vezet megoldásra, mivel az ügyfeleknek lenne egy user/pass párosuk, és ezzel tudnának belépni.
10

belépés

erenon · 2006. Jún. 11. (V), 10.02
Egy oldalon kell belépni, és egy másikon megnézni a dolgokat(szerintem)
Amikor belépnek a megfelelő név/jelszóval, akkor küldesz egy sütit, és a $_SESSION-be felveszed az adatbázisból a névhez tartozó jogot. Minden oldallekérésnél ellenőrzöd ezt a sütit, és meglét esetén jóváhagyod a jogot. Utána a lekérdezés megy, ahogy mondtam. Ha valahol valami nemstimmel, akkor meg megsemmisíted a sütit és a megfelelő munkamenet(egy részét).
12

Ezekkel tisztában vagyok.

Anonymous · 2006. Jún. 11. (V), 10.56
Ezekkel tisztában vagyok. Csupán annyi a gondom, hogy egy SQL táblában tárolt PHP kódot nem tudok lefuttatni, csak az eval() fgv. segítségével, de az nem a leghumánusabb módszer.
Erre keresek megoldást.
11

Védett include, felhasználók táblája

Dualon · 2006. Jún. 11. (V), 10.52
1. Legegyszerűbb: a vezérlést rábízod egy scriptre, és igény szerint a megfelelő php állományokat include-olod. Külső include ellen bevezetsz a vezérlőben egy konstanst, amelynek meglétét halálbüntetés :) (die) terhe mellett ellenőrzöd. Valamelyest javít a biztonságon, ha a konstanst közel véletlenként generálod (pl. [látogató IP-je, látogatás dátuma,] randomszám).
Tanács: Legyen egy listád a behívható PHP állományokról, és ellenőrizd, hogy a kért lap valóban szerepel-e a listádon. Ez történhet pl. egy tömb és elemének ellenőrzésével, de lehet egy switch szerkezet is. Ezzel csökkented annak esélyét, hogy egy allow_url_fopen-es szerveren külső kódot futtassanak a scriptedben.

2. Összetettebb, de lényegesen elegánsabb megoldás: Egy felhasználói tábla. Ez feltehetően hosszú távon is megéri.
Content tábla: menu_id, jog, content
User tábla: user_id, lgn_name, lgn_pass, jog
Jogok (a korábbi javaslatból kiindulva): 0 - látogató; 1 - belépett, de nem jogosult user; 2 - jogosult user; 3 - admin;
Ha a user jog >= content jog, akkor megnézheti. Ezt kapcsolt lekéréssel ellenőrizheted.

E második megoldás szintén primitív, rugalmatlan is, de a legtöbb esetben elég.
Gondold végig, mire kell majd az ellenőrzés, a jövőben nem vennéd-e hasznát egy felhasználói táblának, és így tovább... egyszóval tervezz előre. Szerintem.
13

PHPGACL

janoszen · 2006. Jún. 11. (V), 11.46
Nézd meg a PHPGACL nevű csodát. Ez még egy profi webfejlesztő védelmi igényeit is támogatja ráadásul rendkívül jól dokumentált a használata. A forráskódja nem annyira, de az mást tészta. Egyébként meg az oldal elején megnézed, hogy jogosult-e az oldal lekérésére, ha nem, dobsz egy 401-et.
14

Data Execution Prevention...

janoszen · 2006. Jún. 11. (V), 12.21
Még annyit tennék hozzá, hogy én a PHP rendszereimben elég komoly DEP (Data Execution Prevention) szisztémákat vezettem be pontosan az ilyen hibák elkerülése végett. De ez persze koránt sem jelenti azt, hogy ez biztonságos is. Anélkül meg egyenesen svájci sajt minden ilyen jellegű PHP program.
15

Köszi mindenkinek!

Anonymous · 2006. Jún. 12. (H), 14.08
Mindenkinek köszönöm a segítséget, már neki is láttam a kivitelezésnek.