Säkerhet

1. Förhindra webbplatsöverskridande skriptning

Begreppet Cross-site Scripting (även känt som XSS) avser att en webbapplikation kan samla in illasinnad data från en användare. Ofta injicerar angripare JavaScript, VBScript, ActiveX, HTML, eller Flash i en sårbar applikation för att lura andra användare av applikationen och samla in data från dem. Till exempel kan ett bristfälligt utformat forumsystem, utan någon säkerhetskontroll, presentera användarinmatningar i forumpostningar. En angripare kan sedan injicera ett stycke skadlig JavaScriptkod i en postning med konsekvensen att när andra användare läser postningen kommer JavaScriptkoden att köras oförmodat på deras datorer.

En av de mest angelägna motåtgärderna för att förebygga XSS-attacker är att kontrollera användarinmatningar innan de presenteras. Man kan HTML-inkoda användarinmatningen för att uppnå detta mål. Emellertid, i vissa situationer är HTML-inkodning inte att föredra eftersom den blockerar alla sorters HTML-taggar.

Yii inkorporerar arbeten från HTMLPurifier och erbjuder utvecklare en användbar komponent, CHtmlPurifier, som kapslar in HTMLPurifier. Denna komponent är kapabel att avlägsna all skadlig kod med en omsorgsfullt granskad, säker men ändå tillåtande acceptanslista (whitelist) samt säkerställer att det filtrerade innehållet följer standard.

Komponenten CHtmlPurifier kan användas antingen som en widget eller ett filter. När den används som en widget, städar CHtmlPurifier upp innehåll som presenteras inom densamma i en vy. Till exempel,

<?php $this->beginWidget('CHtmlPurifier'); ?>
...display user-entered content here...
<?php $this->endWidget(); ?>

2. Förhindra webbplatsöverskridande request-förfalskning

Begreppet Cross-Site Request Forgery (CSRF) innebär attacker där en illasinnad webbplats får en användares webbläsare att utföra en oönskad åtgärd på en betrodd webbplats. Till exempel kan en illasinnad webbplats ha en sida som innehåller en bild-tagg vars src pekar till en internetbank: http://bank.example/uttag?överför=10000&till=någon. Om en användare som har en inloggningscookie till nämnda internetbank råkar besöka denna illasinnade webbplats, kommer åtgärden att överföra 10000 kronor till "någon" att utföras. I motsats till tidigare nämnda XSS, som utnyttjar en användares förtroende för en viss webbplats, utnyttjar CSRF det förtroende en webbplats har för en viss användare.

För att förhindra CSRF-attacker, är det viktigt att hålla sig till regeln att GET-request endast skall tillåtas att hämta data, inte att modifiera data på servern. I fråga om POST-request, skall de inkludera något slumpgenererat värde som servern kan känna igen som bekräftelse på att formuläret skickas in från och resultatet sänds tillbaka till, samma källa (motpart).

Yii implementerar ett schema som hjälper till att skydda mot POST-baserade CSRF-attacker. Det är baserat på att ett slumpgenererat värde lagras i en cookie samt jämförelse av detta värde med det värde som skickas med i en POST-request.

Som standard är CSRF-skyddet avstängt. För att slå på det, konfigurera applikationskomponenten CHttpRequest i applikationskonfigurationen som följer,

return array(
    'components'=>array(
        'request'=>array(
            'enableCsrfValidation'=>true,
        ),
    ),
);

och vid presentation av ett formulär, anropa CHtml::form i stället för att skriva en HTML-formulärtagg direkt. Metoden CHtml::form bäddar in det erforderliga randomvärdet i ett dolt fält så att det kan skickas in för CSRF- validering.

3. Förhindra Cookie-attacker

Det är mycket viktigt att skydda cookie från att attackeras, då sessions-ID ofta lagras i sådana. Om någon får tag på ett sessions-ID, kan denne i princip agera som ägare till all relevant sessionsinformation.

Det finns åtskilliga motåtgärder för att skydda mot attacker riktade mot cookie.

  • En applikation kan använda SSL till att skapa en säker kommunikationskanal och endast skicka autentiseringscookie över en HTTPS-anslutning. Angripare förhindras att dechiffrera innehållet i överförda cookie.

  • Låt sessioner upphöra efter inaktivitet av lämplig varaktighet, inklusive alla cookie och sessionssymboler (session tokens), för att minska sannolikheten för attacker.

  • Förhindra webbplatsöverskridande skriptning som kan leda till att godtycklig kod körs i användarens webbläsare och cookieinnehåll röjs.

  • Validera cookiedata och detektera om de har ändrats.

Yii implementerar ett cookievalideringsschema som förhindrar cookie från att modifieras. Mer specifikt utför det HMAC-kontroll (Hash Message Authentication Code) av cookievärden, om validering av cookie är påslagen.

Cookievalidering är avstängd som standard. För att slå på den, konfigurera applikationskomponenten CHttpRequest i applikationskonfigurationen på följande vis,

return array(
    'components'=>array(
        'request'=>array(
            'enableCookieValidation'=>true,
        ),
    ),
);

För att dra nytta av de cookievalideringsscheman Yii erbjuder måste vi också hantera cookie genom cookies-samlingen, i stället för direkt genom $_COOKIES:

// hämta cookien med det angivna namnet
$cookie=Yii::app()->request->cookies[$name];
$value=$cookie->value;
......
// skicka en cookie
$cookie=new CHttpCookie($name,$value);
Yii::app()->request->cookies[$name]=$cookie;
$Id: topics.security.txt 2535 2010-10-11 08:28:08Z mdomba $

Be the first person to leave a comment

Please to leave your comment.