Az egyik Python CGI script létrehoz egy formot, aminek post metódusa egy másik Python CGI-t hív meg. Hogy lehetne az első scripben létrehozott változó (nem form mező) értékét a második scriptben láthatóvá tenni.
Igazából arról lenne szó, hogy van egy beléptető CGI script, ahol bekérem a felhasználó nevét és a jelszavát, amit egy MySQL adatbázis táblából leellenőrzök. A felhasználó nevet és a jogosultságot (amit a táblából veszek) egy-egy változóban tárolnám és a programban mindenhol ezek értékét használnám.
Lehet, hogy ezt nem így kell csinálni, de akkor hogyan?
PS: Első lépések ezek, lehet, hogy nagyon dedós amit kérdezek.
- 1524 megtekintés
Hozzászólások
POST-os változókat hogy adod tovább?
Rakj be még egy "hidden" form-változót!
Biztonság: a felh. nevét és jogosultságát NEM szabad kiadni (hamisítható)! Generálni kell egy session változót (autoincrement integer), és azt továbbadni.
Ha mégis kell érzékeny adatot továbbadni, úgy azt HASH-elve tedd!
- A hozzászóláshoz be kell jelentkezni
Erre gondoltál?
print """
<FORM ACTION="/cgi-bin/m/rform_kezelo.py" METHOD="post">
# A következő sor a nemlátható form mező, kezdőértékkel:
<INPUT NAME="Parameter1" TYPE="hidden" value="%s">
<P>Kérem a felhasználó nevét:
<INPUT NAME="Nev" SIZE=40 MAXLENGTH=40 TYPE="text"></P>
<P>Kérem a felhasználó jelszavát:
<INPUT NAME="Jelszo1" SIZE=12 MAXLENGTH=12 TYPE="password">
Megerősítés (jelszó mégegyszer):
<INPUT NAME="Jelszo2" SIZE=12 MAXLENGTH=12 TYPE="password"></P>
<P>Kérem felhasználó jogosultságát :
<SELECT NAME="Jogosultsag">
<OPTION value="A"> Minden</OPTION>
<OPTION value="K"> Kezelő</OPTION>
<OPTION value="L"> Lekérdező</OPTION>
</SELECT></P>
""" % (Python_valtozo)
Ez nem a legegyszerűbb megoldás, de ha nincs más...
A felhasználó nevére szükségem van a bizonylatokhoz, és a jogosultságra is hiszen aszerint engedem meg bizonyos programfunkciók használatát.
A jelszó nem vándorolna, hiszen azt a login script már ellenőrizte és tovább engedte.
Vagy belépéskor csináljak egy "login" táblába egy bejegyzést és mindig onnan vegyem ki az adatokat? De akkor legalább a "login" tábla aktuális bejegyzésének a kulcsát át kell valahogy adnom. A tempfájl sem lenne biztonságosabb.
- A hozzászóláshoz be kell jelentkezni
Igen, erre. Ha nincs más kapcsolat a két szkript között, akkor ez a paraméter-átadás a legegyszerűbb és legszabványosabb.
Azt hogyan küszöbölöd ki, hogy lehallgatom amint xy belépett, és mielőtt válaszolna (továbbklikkelne), én is küldök neked POST kérést xy nevével és jogosultságával? Máris beléptem "helyette"...
Szvsz sokkal jobb, ha csak egy session/bejelentkezés azonosító vándorol, TIMEOUT-tal - és akkor akármennyi adat lehetne hozzá a szerveren...
Bár lehet, hogy erre találták ki a cookie-kat...
- A hozzászóláshoz be kell jelentkezni
Nem, nem itt tévedés van. Neked csak a felhasználó konkrét és biztonságos identifikációjára van szükséged, a jogosultságokat akár a user neve alapján is lekérdeztetheted egy sql táblából.
- A hozzászóláshoz be kell jelentkezni
Az igaz, hogy a neve alapján is lekérdezhetem a jogosultságot.
Van három jogosultság: A admin, K kezelő, L lekérdező
Én úgy gondoltam, hogy beléptetéskor egy változóban tartom a nevet egy másikban az egy karakteres jogosultságot.
Amikor megjelenítem a menüt, akkor eleve csak azok a menüpontok szerepelnek, amelyek az adott jogosultsághoz megengedettek.
Azért gondoltam, ezt a két változót "globálisan" tárolni, mert egy információt mindenképpen át kell adni (célszerűen az aktuális felhasználó adattábla kulcsát), akkor már mindegy ha a nevet és a jogosultságot adom át és megspórolom, hogy újra és újra az adatbázisból kérjem le.
Tehát a lényeg nem az, hogy egy kulcsot vagy két változó értéket (paramétert adok át), hanem az, hogy az egyik Python CGI szkrip, hogyan adjon át értéket egyáltalán a másiknak?
Most hangosan gondolkodok
A rejtett form mező esetén ez így működne:
1.) Login form -> Login form feldolgozó szkript -> sikeres belépés esetén tudom a kulcsát, a nevét és a jogosultságát.
2.) Be kell töltenem a menüt. Ahhoz hogy tudjam a jogosultságot a Login form feldolgozó szkriptnek át kell adnia valamilyen paraméter, a menü generátornak...
Itt a megoldás: Login form feldolgozó generálja a menü formot, hiszen ő már tudja a jogosultságokat! Egyben egy rejtett mezőben átadja a paramétereket (pl nevet vagy kulcsot) mert arra szüksége lesz pl a merlegjegy készítő modulnak, hogy az aláíráshoz ki tudja írni a kezelő nevét.
PS: Mostanában a login szkriptet hanyagoltam és a törzsadatok feltöltését kódoltam. Itt is vannak érdekes dolgok. Pl. aszfalt receptúra feltöltése. Csupa már letárolt alapanyag adatból kell összeállítani a keverési rányt. És a meglévő receptúra esetén fel kell hozni a régit, hogy módosítható legyen. A form elhagyása előtt ellenőrizni kell, hogy az összetevők aranyának összege 100% legyen.
Ja egy raktárkezelő, mérlegelő, gyártó program készül, ami egyszer talán számlázni is tud majd. A mérleg digitálsi kijezőjének soros porton történő kiolvasása már megy Pythonból.
(Csak hallkan: Ha jól sikerül ez lesz az első GPL-es programom.)
- A hozzászóláshoz be kell jelentkezni
Nem, nem rossz fele mész.
Amikor eljutunk a login form feldolgozóig, akkor nyilván már az öszes fontos adatod megvan. Gondolom a menügenerátor CGI-t már az index.cgi hívja. De a menügenerátor ugyanolyan kis python szkript, tehát ha megkapja valahonnét a user loginnevét akkor már képes önállóan SQL kérdezgetésekbe kezdeni, hogy akkor ezt itt most mégis hogy. Innentől a probléma solved, mert a menügenerátor önerejéből képes megmondani hogy az usernek mik a jogai. Ha jól indexelt a táblád, akkor minimális plusz load-ot fogsz generálni.
- A hozzászóláshoz be kell jelentkezni
Szvsz ne a user nevét küldözgesd/add át paraméterként, hanem a session / bejelentkezés azonosítót!
Az pedig egy táblában megmondja a felh. azonosítóját, így a szkriptek tudják a jogosultságokat.
Ennek az az előnye, hogy el tud évülni a bejelentkezés, és senki nem tudja a cgi-jeidet hívni másolt usernévvel.
- A hozzászóláshoz be kell jelentkezni
hali
nem lenne kenyelmesebb a mod_python-t hasznalni?
/* bocs az esetleges helyesirasi hidakert */
- A hozzászóláshoz be kell jelentkezni
Tudnál CGI példát (linket példára) vagy példákkal bőven illusztrált doksit mutatni mod_python-ban? Már azt se' bánom ha angol nyelven, bár ez lassítja a dolgot, de legalább tanulom megérteni az írott angol szöveget.
... mint Paganel a Grant kapitány gyermekeiben egyetlen egy portugál könyv elolvasásával tanult meg spanyolul!? :-{))E
- A hozzászóláshoz be kell jelentkezni
dejo-nak írom:
Azt az i taget nem zártad le, így most nem dőlt. ha szerencséd van, akkor le tudod zárni mielőtt hozzád szólnának. Amúgy ha megfigyeled a mod_python szó atommókus kommentjében nem szépítésből aláhúzott, hanem mert link.
Azonban vigyázz: A mod_python kicsit más hozzáállást követel meg...
- A hozzászóláshoz be kell jelentkezni
Köszi a figyelmeztetést javítottam.
Igen ezt is köszönöm, a mod_python manualt is megnéztem, de ez nekem kicsit száraz. Jóval több példa kellene illusztrációként, hiszen mint írtam az angollal eléggé gyengén állok.
Azt sem tudom eldönteni, hogy kell-e nekem a mod_python. Azt látom, hogy 15-ször gyorsabb a sima Python-CGI-nél, de szerintem nálam ez nem olyan fontos (egyelőre biztos nem).
- A hozzászóláshoz be kell jelentkezni
Te, tényleg nem sértésnek szánom, istenbizony, de rákerestél arra Google-val hogy mod_python tutorial vagy howto vagy egyáltalán csak mod_python?
- A hozzászóláshoz be kell jelentkezni