PHP strpos () dönen garip sonuçlar

0 Cevap php

Benim webapp için temel bir 'güvenlik denetimi' yazdım. Ben kullanıcı gönderilen kod kötü şeyler içeren bir bakışta olup olmadığını görmek gerekir.

Here is a screenshot Şu anda karşı koşuyorum kodu: http://cl.ly/677a6dc40034f096697f

Here is the PHP code Ben bu kod üç bit karşı istimal:

<!-- The View -->
<h2>Security analysis</h2>
<?php echo securitycheck($html, $css, $js); ?>

-

// The controller
function securitycheck($html, $css, $js)
{
    // The code is the html, css, and js, appended together. We're scanning it all.
    $code = $html." ".$css." ".$js;

    // $insecure is our array of naughty things to search for.
    $insecure = array(
                        /* HTML Elements */
                        'applet',
                        'basefont',
                        'base',
                        'behavior',
                        'bgsound',
                        'blink',
                        'embed',
                        'expression',
                        'frameset',
                        'frame',
                        'ilayer',
                        'iframe',
                        'isindex',
                        'javascript',
                        'layer',
                        'link',
                        'meta',
                        'object',
                        'plaintext',
                        'style',
                        'script',
                        'xml',
                        'xss',
                        /* Javascript Elements */
                        'alert',
                        'cmd',
                        'passthru',
                        'eval',
                        'exec',
                        'expression',
                        'system',
                        'fopen',
                        'fromcharcode',
                        'fsockopen',
                        'file',
                        'file_get_contents',
                        'readfile',
                        'unlink',
                        /* Misc Elements */
                        'vbscript:',
                        '<?',
                        '<?php',
                        '?>'
                    );

    $found = "";
    $output = "<p><strong>Potentially insecure items found:</strong> ";

    foreach($insecure as $item)
    {
        if (($pos = strpos($code, $item)) !== FALSE)
        {
            $found .= "$item, ";
        }
    }

    if ($found == "")
    {
        $output .= "None.<br/>";
    }
    else
    {
        $output .= "<span class=\"alert\">".substr($found, 0, -2)."</span>"."</p><br/>";  // cuts trailing comma and space from $found
    }

    return $output;
}

Son olarak, here is a screenshot of the returned output (in HTML), http://cl.ly/f246dc419fb499dd6bd7

Ekran bakınız? Yanlış birkaç şey vardır. Sonunda boşluk ve virgül (kesilmiş değil ki ben substr() yapmak için kullanılan ve aynı zamanda alert Eğer ilk ekran görüntüsünde gördüğünüz gibi, sadece orada olduğu zaman s iki rapor veriyor kimse bu geçirilmiş.

Ben yanlış ne yapıyorum?

Teşekkürler!

Kriko

Fosco nazikçe belirttiği gibi EDIT:, alert benim dizi (doh!) iki kez yer aldı. Ancak firar sorunu bırakılabilir virgül, o çözdüm hala orada. Ben bu küçük bir sorun olduğunu biliyorum ama ben hala orada olmamalı yemin ederim ...

0 Cevap