Biztonságos programozás perl
Hogyan kerülhető el a tompított felhasználói változók egy shell hívásakor exec () és a system ()?
A Perl, futtathat egy külső program különböző módokon. Akkor meg a kimenetet külső programok használatával fordított aposztróffal:
Meg tudja nyitni „alagút” (cső) a program:
open (SORT "| / usr / bin / rendez | / usr / bin / uniq");
Meg lehet futtatni egy külső program, és várja a végén a teljesítményt system ():
rendszer „/ usr / bin / sort vagy elindíthatja a külső programok nélkül visszatérnek vezérlés exec (): exec „/ usr / bin / sort Mindezek a kifejezések veszélyesek, ha használja az adatokat a felhasználó által megadott, amely tartalmazhat metakaraktereket. A system () és exec () van egy szintaktikai funkció, amely lehetővé teszi, hogy futtatni egy külső program közvetlenül, anélkül, hogy az operációs rendszer shell. Ha paraméterátadás a külső program, ami nem a húr, lista, Perl nem shell meta-karaktereket, és nem okoz nemkívánatos mellékhatásokat. Például: Akkor használja ezt a funkciót, hogy nyissa ki az alagúton, anélkül, hogy a héj. Calling nyitott egy mágikus szimbólumok sorozatát | -, ha fut egy példánya Perl és nyisson meg egy alagút (cső) a másolatot. Leányvállalat másolatát Perl akkor azonnal elindul a külső programok használatával argumentumlistában az exec (). open (SORT "| -") || exec "/ usr / bin / rendezés", $ uservariable; míg $ line (@lines)
Print Rendezés $ sor, "\ n"; Olvasni az alagút-szerű módszert lehet használni anélkül, hogy a héj, a sorrendben - |: open (grep, "- |") || exec "/ usr / bin / grep" $ userpattern, $ filename; print "mérkőzés: $ _"; Ezek a formák open (), amely mindig használni azokban az esetekben, amikor egy másik helyzetben használná átirányított nyitott (vezetékes nyitva). Még több trükkös funkció lehetővé teszi, hogy végre a külső programok és becsapják őket, hogy a saját nevét. Ez hasznos programok, amelyek tevékenysége függ név segítségével futnak. rendszer $ nastoyaschee_imya "lozhnoe_imya", "arg1", "item2" rendszer $ shell "-sh", "- NORC" Ez a példa elindítja a sh - shell az operációs rendszer - a „SH” nevet, arra kényszerítve őt, hogy járjon interaktívan. Zamette, hogy ez a program nevét kell tárolni egy változó, és a változó nevét, és a lista elején nincs értelme érveket. Mi lehet írni ezt a parancsot tömörebb: Mi az a „teszt átvihetőséget” (mellékíz ellenőrzése) Perl? Hogyan lehet engedélyezni őket? Mint láttuk, az egyik leggyakoribb probléma, ha a biztonsági programozás CGI - átadása a shell OS felhasználói változók ellenőrzés nélkül. Perl biztosít egy mechanizmust, hogy ellenőrizze a „fertőzőképesség”, amely nem teszi lehetővé, hogy erre. Bármely változó, amely proinitsiirovana kívül eső adatokat a program (beleértve az adatokat a környezet, a standard input és a parancssor) tekinthető a „ragályos”, és többé nem lehet használni a programon kívül. A fertőzés terjedését. Ha használja a szennyezett változó értéket rendelni a másik változó, a második változó is okozott. A fertőzött változók nem előhívásához használt eval (), system (), exec () vagy vezetékes open (). Ha megpróbálja ezt, Perl leáll, és figyelmeztetést jelenít meg. Perl is megtagadják a munkát, ha megpróbálja hívni egy külső program, amely nem kifejezetten az értéket a PATH. A 4-es verzió Perl nyelv magában foglalja annak ellenőrzését egy speciális változata a tolmács az úgynevezett „taintperl”: Az 5-ös verzió - használja a -T zászló, amikor a tolmács indításakor Az alábbiakban ismertetjük a „szennyezett” (untaint) változókat. Még ha nem bízik a PATH környezeti változó, amikor fut a külső programok, fennáll a lehetősége, ami egy külső program. Ezért minden esetben tartalmaznia kell egy ilyen sort elején a szkript, ha használja mellékíz ellenőrzések: Szerkesztése úgy, hogy felsorolni a könyvtárat, ahol keresni szeretne. Vklyuyaenii ötlet az aktuális könyvtár ( „”) A PATH változó egy rossz ötlet. Mivel a „szerek (untaint) változó? Leveszem metakaraktereket a változó, de Perl még mindig azt hiszi, hogy ő fertőzött! Lásd a fenti választ. Az egyetlen módja annak, hogy fertőtlenítse a változó - használja a wildcard keresést. Nem biztonságos keresési művelet $ ize = Gyakran a probléma egy Perl CGI script, hogy a felhasználó számára, hogy egy listát a kulcsszavakat, és használja őket egy keresési művelet, hogy megtalálják a maszkot a megfelelő fájlnevek (vagy valami - valami ilyesmi). Ez önmagában nem veszélyes. Veszélyes optimalizálás, ami néhány Perl program használja, hogy gyorsítsák fel a keresést. Ha egy változót a keresési művelet, a kifejezés össze, valahányszor a művelet. Annak elkerülése érdekében, újrafordítás, elfoglal az időt, akkor egy különleges zászlót - o, ami vezet az a tény, hogy a kifejezés kell összeállítani csak egyszer: Most azonban, Perl figyelmen kívül hagy minden változás a változó, ami vezet helytelen működése ilyen ciklus: foreach $ user_pattern (@user_patterns)
nyomtatni, ha m / $ user_pattern / o; Kerülő ezt a problémát, a programozók, az írás Perl, gyakran használják ezt a trükköt: foreach $ user_pattern (@user_patterns)
nyomtatni, ha m / \ Q $ user_pattern \ E / o; Saját CGI script többre van szüksége, a kiváltságokat, mint ez egyre nobody felhasználó. Hogyan tudom megváltoztatni a felhasználói azonosítót? Tudod, hogy egy script fut a jogosultságokat a tulajdonos beállításával a biteket s: Adhat neki a jogot, hogy a csoport, amelyhez tartozik a tulajdonos, amelyben az s bit a csoport területén: Azonban sok Unix rendszerek tartalmaznak egy kiskapu, amely lehetővé teszi, hogy az ilyen hacker szkripteket. Ez csak a scriptek, hanem összeállított programokat. Az ilyen rendszerekben a kísérletet futtathatja a Perl, melyek voltak kiállítva s bit, azt eredményezi, egy hibaüzenet a részét Perl. Ezekről a rendszerekről, akkor két lehetősége van: Azt is rögzíti a kernel, hogy megakadályozzák a telepítés ezen bit a script fájlokat. Perl mindazonáltal helyesen azonosítani ezeket a biteket, és állítsa be a felhasználói azonosítót. További információ a található a Perl gyik: Tudod, hogy a forgatókönyvet a shell, napmsannuyu C. Általában ez így néz ki: Összeállítása után a program, vystavte s bit. A programot végrehajtani, hogy a tulajdonos a jogok futtatni a Perl értelmező és végrehajtja a script fájlban szereplő „foo.pl”. Ezen felül, akkor lehet futtatni a szerver maga a felhasználó elegendő jogosultsággal végezze el a szükséges intézkedéseket. Ha használja a CERN szerver, akkor azt a lehetőséget, hogy fut a szerver különböző jogokat a különböző szkriptek. Lásd. A CERN dokumentáció további információkat.Kapcsolódó cikkek