RIPS je analizator PHP izvornog koda koji obavlja analizu bez izvršavanja programa (static program analysis). RIPS je osmišljen kao vrlo jednostavno web sučelje. Unutar sučelja odabiremo put do datoteke koju želimo analizirati, postavku dali želimo provesti skeniranje po svim poddirektorijima određenog projekta, razinu detaljnosti ispisa analize i tipove ranjivosti koje želimo provjeriti. RIPS može provjeravati razne poslužiteljske i klijentske ranjivosti. Bez obzira što je PHP poslužiteljski skriptni jezik, razni statički sadržaj i JavaScript kod uključen u izvorni kod mogu biti provjereni ako tako odaberemo. Testirane su neke uobičajene poslužiteljske ranjivosti kako bi vidjeli kako RIPS analizira kod, te kakvu kvalitetu ispisa i informacija daje kroz objašnjenja propusta i načine na koje ih se može ispraviti.
<?php
b=$_GET[‘word’];
$a= $b . “neki string”;
eval($a);
?>
Testirali smo ranjivost izvršavanja proizvoljnog PHP koda. Ova ranjivost postoji zbog korištenja eval() funkcije koja neki niz znakova predan funkciji interpretira kao PHP kod. Analiza vrlo kratkog PHP programa dala je izlaz na slici 1. RIPS je prepoznao ranjivost izvršavanja proizvoljnog koda sa naznakom „Userinput reaches sensitive sink.“. Ovo pokazuje da RIPS prati varijablu na koju korisnik neke web aplikacije ima direktni utjecaj, kroz razne izraze u kojima se ona koristi. Na kraju zaključuje dali je konačna varijabla predana kao ulaz u eval() funkciju. Nakon analize koda, „help“ tipka nam pruža detaljniji opis code execution ranjivosti i načina na koji je nastala. Ova opcija je jako korisna jer omogućuje kratku edukaciju za PHP programera koji nije upoznat sa sigurnošću web aplikacija. Među ostalim opisani su i načini na koji se zaštititi od ovakvih ranjivosti, te PHP funkcije koje se mogu koristiti kako bi se sigurnosni propusti izbjegli (slika 2).
<?php
$sql = “SELECT `article_title` FROM `articles` WHERE `ID` = ” . mysql_real_escape_string ( $_GET[‘ID’] );
mysql_select_db ( $database, $connect );
if ( @mysql_query ( $sql ) )
{
$query = mysql_query ( $sql );
$row = mysql_fetch_assoc ( $query );
echo $row[‘article_title’];
}
else {
die ( mysql_error () );
}
?>
Testiranjem SQL injection ranjivosti pokazalo se da RIPS analizator nije tako „trivijalan“ kako bi se moglo očekivati nakon vrlo jednostavnog koncepta analize code execution ranjivosti. Na slici 3 je prikazana analiza SQL injection ranjivosti. Korištenjem mysql_real_escape_string() funkcije ograničavaju (escape) se svi posebni znakovi SQL jezika, te se korištenje ove funkcije često smatra dovoljnom kako bi izbjegli mogućnost napada. Međutim ranjivost ostaje prisutna jer nisu korišteni znakovi navodnika cjelokupnog korisničkog unosa. RIPS upozorava na ovaj propust (slika 3), te na mogućnost blind SQL injectiona. Postavljanjem navodnika oko varijable svi propusti su uklonjeni.
$downloadlink = get_field('download_link'); ?>