Php Ve XSS Korumasi (Soru)
-
Merhaba Murid kardeslerim. Ben bir adet php sistem gelistirmekteyim (sanki basliktan belli degilmis gibi yazim)
CK editor veya tiny editor kullanarak kullanicinin bir yorum bildirim girmesini istiyecegim.buna karsin XSS'e karsi kullandigim htmlSpecialchars kodunun yeterli guvenlikte olmadigini ve ztn editorde bunu kullanamayacagimi dusundugumden nasil bir XSS filtrelemesine gitmem gerekli diye dusunmekteyim.
-
belli başlı kelime gruplarını replaceletmekten başka şansın yok hocam
-
filter_var ya da strip_tags kullanabilirsin, daha geniş bir koruma sağlamak istiyorsan, bir fonksiyon yazıp, replace etmen gereken tüm verileri kontrolden geçirebilirsin ve fonksiyon temiz data döndürene kadar döngüde kalmasını sağlarsın.
-
xss fonksiyonu olarak en iyisi şuanda bu ;)
<?php
function xss_sql_filter($filtereddata,$htmlview)
{
$fdata1 = array('javascript','vbscript','expression','applet','meta','xml','blink','link','style','script','embed','object');
$fdata2 = array('iframe','frame','frameset','ilayer','layer','bgsound','title','base');
$fdata3 = array('onabort','onactivate','onafterprint','onafterupdate','onbeforeactivate','onbeforecopy','onbeforecut');
$fdata4 = array('onbeforedeactivate','onbeforeeditfocus','onbeforepaste','onbeforeprint','onbeforeunload');
$fdata5 = array('onbeforeupdate','onblur','onbounce','oncellchange','onchange');
$fdata6 = array('onclick','oncontextmenu','oncontrolselect','oncopy','oncut','ondataavailable');
$fdata7 = array('ondatasetchanged','ondatasetcomplete','ondblclick','ondeactivate','ondrag');
$fdata8 = array('ondragend','ondragenter','ondragleave','ondragover','ondragstart','ondrop');
$fdata9 = array('onerror','onerrorupdate','onfilterchange','onfinish','onfocus','onfocusin','onsubmit');
$fdata10 = array('onfocusout','onhelp','onkeydown','onkeypress','onkeyup','onlayoutcomplete');
$fdata11 = array('onload','onlosecapture','onmousedown','onmouseenter','onmouseleave','onmousemove');
$fdata12 = array('onmouseout','onmouseover','onmouseup','onmousewheel','onmove','onmoveend');
$fdata13 = array('onmovestart','onpaste','onpropertychange','onreadystatechange','onreset','onresize','onunload');
$fdata14 = array('onresizeend','onresizestart','onrowenter','onrowexit','onrowsdelete','onrowsinserted');
$fdata15 = array('onscroll','onselect','onselectionchange','onselectstart','onstart','onstop');
$nhtmlchar = array("<",">","(",")","'",";");
$fhtmlchar = array("<",">","X","X","X","X");
$filtereddata = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/','',$filtereddata);
$datasearch = 'abcdefghijklmnopqrstuvwxyz';
$datasearch .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$datasearch .= '1234567890!@#$%^&*()';
$datasearch .= '~`";:?+/={}[]-_|\'\\';
$filterwhile = array_merge($fdata1,$fdata2,$fdata3,$fdata4,$fdata5,$fdata6,$fdata7,$fdata8,$fdata9,$fdata10,$fdata11,$fdata12,$fdata13,$fdata14,$fdata15);
$found = true;
for ($dnum = 0; $dnum < strlen($datasearch); $dnum++)
{
$filtereddata = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($datasearch[$dnum])).';?)/i',$datasearch[$dnum],$filtereddata);
$filtereddata = preg_replace('/(�{0,8}'.ord($datasearch[$dnum]).';?)/',$datasearch[$dnum],$filtereddata);
}
while ($found == true)
{
$val_before = $filtereddata;
for ($dnum = 0; $dnum < sizeof($filterwhile); $dnum++)
{
$pattern = '/';
for ($jnum = 0; $jnum < strlen($filterwhile[$dnum]); $jnum++)
{
if ($jnum > 0)
{
$pattern .= '(';
$pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
$pattern .= '|(�{0,8}([9][10][13]);?)?';
$pattern .= ')?';
}
$pattern .= $filterwhile[$dnum][$jnum];
}
$pattern .= '/i';
$filtereddata = preg_replace($pattern,"[BAN]",$filtereddata);
if ($val_before == $filtereddata) { $found = false; }
}
}
print $filtereddata;
}
?>
-
batuhangoksu senin yazdiginda gordugum kadari ile < ve > karakterlerinide filtreliyor yani bir editor kullanamiyor olacagim.
http://htmlpurifier.org/ buldum bu konuda daha onceden calismis arkadaslar varmi acaba ?
