Introduktion till datasäkerhet. Christian Ohlsson 1

Relevanta dokument
Essential Php Security Författare: Shiflett, Chris Antal sidor: 124 Förlag: O'Reilly

Säkerhet. Säkerhet. Johan Leitet twitter.com/leitet facebook.com/leitet. Webbteknik II, 1DV449

Webbsäkerhet för IT-tekniker VT2014 Johan Leitet Nätverkssäkerhet, 1DV425 johan.leitet.se twitter.com/leitet facebook.

OWASP Topp De 10 allvarligaste riskerna i webbapplikationer OWASP East Sweden: Uppstartsmöte

Modul 6 Webbsäkerhet

Swedish Association for Software Testing Inspect it AB

Avancerade Webbteknologier 2. AD11g Göteborg 2012 Säkerhet

E11 "Protection" Föreläsning 11, HT2014 Säkerhet, tillgänglighet. Johan Leitet. Kurs: 1dv403 Webbteknik I

Webbprogrammering. Sahand Sadjadee

Karlstads Universitet, Datavetenskap 1

Säkerhet i applikationslagret och slaget om webben. John Wilander, Omegapoint, Rätt säkerhet, maj 2010

Webbsäkerhet. för IT-tekniker VT2013. Johan Leitet johan.leitet.se

Kryptering. Krypteringsmetoder

Tentamen etjänster och webbprogrammering

Modul 8 Hantering av indata

WordPress och säkerhet inom tillägg från tredje parter

Webbprogrammering - 725G54 PHP. Foreläsning II

Webbservrar, severskript & webbproduktion

Avancerade Webbteknologier

JobOffice SQL databas på server

Databaser på webben. Revision Johan Näsholm, johan@nasholm.com

Identity Management i ett nätverkssäkerhetsperspektiv. Martin Fredriksson

Säkerhet. Föreläsning 6 Säkerhet. Johan Leitet twitter.com/leitet facebook.com/leitet. Webbteknik II, 1DV449

Content Management System. Publiceringssystem

Installera din WordPress med 9 enkla steg

Tomas Axelsson

10 TIPS FÖR ATT SÄKRA DIN HEMSIDA. Hur du gör för skydda dig mot att din hemsida ska hackas.

Lagring i molnet. Per Hellqvist Senior Security Specialist Symantec Nordic AB

Laboration 3 i kursen Produktion för tryckta medier och webb: Webbplatsproduktion med ett publiceringssystem

PHP - Fortsättning. PHP och MySQL

729G28. Webbprogrammering och databaser. Introduktion till webbutveckling med PHP. Jakob Pogulis Institutionen för Datavetenskap (IDA)

Innehåll. Dokumentet gäller från och med version

Virus och andra elakartade program

Uppdatera Easy Planning till SQL

emopluppen Installationsmanual

Webbsidor och webbservrar

Instruktion för integration mot CAS

Fallstudie runt införande av SWAMIDs multifaktorinloggning vid ett lärosäte

Medieteknologi Webbprogrammering och databaser MEB725, 5p (7,5 ECTS) Klientprogrammering JavaScript Program på flera sidor

Installation xvis besökssystem, Koncern

Databaser och Datamodellering Foreläsning IV

Statistiska centralbyrån

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Content Management System. Publiceringssystem

Services + REST och OAuth

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Innehåll. MySQL Grundkurs

Introduktion Till WordPress

JavaScript in SharePoint and not just for Apps. Wictor Wilén

WordPress Multisite. Christian Ohlsson

Skapa din egen MediaWiki

tisdag 8 november 11

Introduktion HTML och PHP 732G16 Databaser design och programmering

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

Innehåll Security. Chapter 4 och 7 Beginning SQL Server 2008 for Developers

Instruktion för användande av Citrix MetaFrame

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

Introduktion till protokoll för nätverkssäkerhet

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

ADO.NET Murach Kapitel 17-20

MONA-handledning. 1. Inloggning. Version 2 1(5) Användarhandledning - UTKAST MONA-support. 1. Inloggning 2. Användning 3.

Dokumentation för VLDIT AB. Online classroom

JAVASCRIPT. Beteende

Tekniska lösningar som stödjer GDPR

DT069G - Multimedia för webben - VT16_P4

Webbaserade informationssystem med PHP och databaser

Riktlinjer för informationssäkerhet

F06 A table form Dagens agenda

Nya webbservern Dvwebb.mah.se

Överföring av filer med Zendto v 1.1. stora filer som inte kan skickas via e-post konfidentiella uppgifter som inte kan skickas via okrypterad e-post

Klientprogrammering mot databaser

ASP.NET MVC. Copyright Mahmud Al Hakim Innehåll

Statistiska centralbyrån

Webbprogrammering. Introduktion till PHP. Christian Ohlsson

Lösenordsportalen Hosted by UNIT4 For instructions in English, see further down in this document

Hemsideutveckling för Anjool AB

Cipher Suites. Rekommendationer om transportkryptering i e-tjänster

Innehåll. PHP Grundkurs. Introduktion till PHP. Kurslitteratur. Webbserver. Lite historik. PHP Grundkurs 1

Innehåll. Föreläsning 3. javax.naming.context. javax.sql.datasource. Vad är JDBC? Java Naming and Directory Interface(JNDI) Viktigaste metoder:

WP-Edit. Robin Larsson Martin Davik. Examensarbete, grundnivå, 15 hp Datavetenskap Internetteknologprogrammet

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

emopluppen Användning av "Ant" Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC)

Projekt Foreläsning VI

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner

Lektion 5 HTML, CSS, PHP och MySQL

PHP. PHP: Hypertext Preprocessor

FactoryCast HMI. Premium & Quantum PLC. MySQL Server och FactoryCast HMI databastjänst

SNITS-Lunch. Säkerhet & webb

Webbaserade informationssystem med PHP och databaser

WWW. Exempel på klientsidan. Överföring av en html-fil. Snyggare variant. Verkligt format. Meddelandeformat för begäran HTTP

F8 Webbteknologier 1. Dynamiska webbsidor

Tekniska lösningar som stödjer GDPR

Lathund - Redigera innehåll på Comfort Audios webbplats. 1. Logga in i WordPress Ändra/lägg till användare Lägga till nya sidor...

2 Varför är XSS och SQL-injection så vanligt?

Plugins som får er Wordpress att sticka ut

Aktivering av SSL (https).

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Anvisningar för inkoppling till Mikrodataåtkomst vid SCB

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Transkript:

Introduktion till datasäkerhet Christian Ohlsson 1

Varför säkra upp webbapplikationer? Christian Ohlsson 2

Vart ska man attackera? Tema WP PHP Apache Win/ Mac/ Linux h"ps Cisco h"ps SUN Klient Brandvägg Server Christian Ohlsson 3

Brandväggen? Christian Ohlsson 4

Krypteringen? Christian Ohlsson 5

Servern? Christian Ohlsson 6

Apache? Christian Ohlsson 7

PHP? Christian Ohlsson 8

WordPress? Christian Ohlsson 9

Någons okontrollerade kod? Christian Ohlsson 10

Virus drabbar amerikanska drönare Christian Ohlsson 11

SONY Playstation Network 77 miljoner konton stulna. Lösenord i klartext Christian Ohlsson 12

SonyPictures.com LulzSec: SQLi stal konton Christian Ohlsson 13

Top 25 Most Dangerous Software Errors 1. SQL Injection 2. OS Command Injection 3. Classic Buffer Overflow 4. Cross-site Scripting 5. Missing Authentication for Critical Function 6. Missing Authorization 7. Use of Hard-coded Credentials 8. Missing Encryption of Sensitive Data 9. Unrestricted Upload of File with Dangerous Type 10. Reliance on Untrusted Inputs in a Security Decision Christian Ohlsson 14

Definitioner Identifiering Autentisering Auktorisering Sessionshantering Christian Ohlsson 15

Identifiering/Autentisering Hur kan man bevisa vem man är? Biometriska pass ID-kort med foto Fingeravtryck Användarnamn/Lösenord Christian Ohlsson 16

Autentisering Enkla eller multipla faktorer Endast lösenord Lösenord samt fingeravtryck Avvägning mellan Enkelhet Kostnad Komplexitet Säkerhet Christian Ohlsson 17

Christian Ohlsson 18

Christian Ohlsson 19

Autentisering på webben Christian Ohlsson 20

Autentisering på webben Enkel autentisering (Basic) Autentisering med Digest Autentisering med Formulär Christian Ohlsson 21

Enkel autentisering Christian Ohlsson 22

Enkel autentisering Christian Ohlsson 23

Enkel autentisering Ingen kryptering Användarnamn och lösenord bara kodas om Kräver en säker kommunikationskanal Christian Ohlsson 24

Digest-autentisering Hashar username och password Christian Ohlsson 25

Digest-autentisering Christian Ohlsson 26

Digest-autentisering Fördelar Kommunikationen är mer säker, trots viss osäkerhet med användningen av MD5 Nackdelar Server lagrar användarnamn/lösenord i klartext Sårbar mot Man-in-the-middle-attacker (MITM) Christian Ohlsson 27

Autentisering med formulär Christian Ohlsson 28

Autentisering med formulär Fördelar Enkel att utveckla Interface som skapas av designers Kan använda multi-faktor autentisering Nackdelar Kräver en säker kanal Christian Ohlsson 29

Andra autentiserings-metoder Single-sign-on Open-ID, ShibboLeth osv Använda Windows-autentisering Token-baserad Open-time-passords (OTP) Secure-ID osv Publik-nyckel (SSL med klient-cert) Christian Ohlsson 30

RBAC: Roll baserad Access-kontroll Roller i systemet identifieras admins, gruppledare, utvecklare Rättigheter tilldelas roller Gruppledare kan skriva på webbsidan Entiteter tilldelas roll/roller Anna är en gruppledare Christian Ohlsson 31

RBAC: Roll baserad Access-kontroll Mycket enklare än att tilldela rättigheter på entitetsnivå Dessa roller kan enkelt länka till de befintliga roller som finns inom organisationen Automatisk underhåll Mindre administration Christian Ohlsson 32

RBAC: Roll baserad Access-kontroll Christian Ohlsson 33

Ring a bell? Christian Ohlsson 34

Olika typer av attacker Christian Ohlsson 35

Olika typer av attacker Sessions-attacker Session Fixation / Sessions-ID forgery Cross-Site Scripting Cross-Site Request Forgery Injection SQL Injection Command Injection Google Hacks Christian Ohlsson 36

Session ID Forgery Manipulering av URL Manipulering av POST-parametrar Christian Ohlsson 37

Citibank Citibank kunder förlorade $2.7 miljoner dollar i en attack Christian Ohlsson 38

23-årig attackerare fick 200.000 konton Christian Ohlsson 39

Cross-Site-Scripting Den absolut vanligaste formen av sårbarhet på dagens webbsidor Man beräknar att upp till 68% kan vara sårbara för XSS Christian Ohlsson 40

Cross-Site-Scripting Beständig Christian Ohlsson 41

Cross-Site-Scripting Icke-Beständig Christian Ohlsson 42

Little Bobby Tables J Christian Ohlsson 43

Cross-Site-Scripting Vad kan hända om man blir utsatt? Väldigt mycket: Identitets-stölder Spridning av elak programvara Site Defacement: Christian Ohlsson 44

Christian Ohlsson 45

.gov Christian Ohlsson 46

Christian Ohlsson 47

Wordpress.org Lagade en felaktighet som kunde leda till XSS i version 3.1.1 Christian Ohlsson 48

XSS: Man kan man lära sig? Lita aldrig, aldrig aldrig på User Input, bland annat genom: Formulär URL Cookie HTTP Headers Christian Ohlsson 49

XSS: Motmedel Ta bort HTML-kod Använd White-list eller Backlist Använd märkord istället för HTML Som Wikis & forum gör med med BB-code Använd ett scannerverktyg Exempelvis Acunetix Christian Ohlsson 50

Cross-Site-Request Forgery Christian Ohlsson 51

Cross-Site-Request Forgery Christian Ohlsson 52

Cross-Site-Request Forgery: Motmedel För slutanvändaren finns väldigt lite man kan göra Logga ut från sajten före du besöker nästa Använd inte Kom ihåg mig -knappen Surfa inte på platser du inte litar på Christian Ohlsson 53

Cross-Site-Request Forgery: Motmedel För utvecklaren av sajten finns en del saker man kan göra: Ta med ett hemligt nounce i formulär Ignorera GET-parametrar när du processar POST-data Christian Ohlsson 54

SQL Injection Christian Ohlsson 55

SQL Injection SQL injektion är indata från användaren som tillåts passera direkt till databasen utan att ha tvättats Christian Ohlsson 56

SQL Injection: Exempel Christian Ohlsson 57

SQL Injection: Motmedel Lita aldrig, aldrig aldrig på User Input, bland annat genom: Formulär URL Cookie HTTP Headers Christian Ohlsson 58

SQL Injection: Motmedel Använd Prepared Statements Fördelar Förkompilerade frågor: lite snabbare Nackdelar Liiiite mer komplext Christian Ohlsson 59

Google Hacking DB Christian Ohlsson 60

exploit-db.com: Sårbarheter i WordPress http://bit.ly/1jmcxll Christian Ohlsson 61

1337day.com Enorm databas med färdiga exploits Christian Ohlsson 62

metaspliot.com Christian Ohlsson 63

User input? NEVER NEVER NEVER TRUST USER INPUT Christian Ohlsson 64

Stuxnet Video om Stuxnet http://vimeo.com/25118844 TED-talks om Stuxnet http://www.ted.com/talks/ ralph_langner_cracking_stuxnet_a_21st_century_cyb erweapon.html Christian Ohlsson 65

Skriva säker kod i WordPress Christian Ohlsson 66

Kodarens gyllene regel Christian Ohlsson 67

Informationshantering All data är skadlig till dess att motsatsen bevisats Christian Ohlsson 68

SQLi och WordPress global $wpdb; $ID = $_GET['ID']; $sql = "SELECT post_title FROM $wpdb->posts WHERE ID = '$ID';"; Tänkt resultat: SELECT post_title FROM wp_posts WHERE ID = '5'; Christian Ohlsson 69

SQLi och WordPress global $wpdb; $ID = $_GET['ID']; $sql = "SELECT post_title FROM $wpdb->posts WHERE ID = '$ID';"; Möjligt resultat: SELECT post_title FROM wp_posts WHERE ID = ' ; SELECT * FROM wp_users WHERE 1 = '1'; Christian Ohlsson 70

$wpdb->insert() Christian Ohlsson 71

$wpdb->insert() $wpdb->insert( $table, $data, $format ) $wpdb->insert( $wpdb->postmeta, array( 'post_id' => '5', 'meta_key' => '_custom_meta_key', 'meta_value' => 'true' ), array( '%d', '%s', '%s' ) ); Christian Ohlsson 72

$wpdb->update() Christian Ohlsson 73

$wpdb->update( $table, $data, $where, $format, $where_format ) $wpdb->update( $wpdb->postmeta', array( 'meta_value' => 'false' ), array( 'post_id' => 5, 'meta_key' => '_custom_meta_key' ), array( '%s' ), array( '%d', '%s' ) ); Christian Ohlsson 74

$wpdb->delete() Christian Ohlsson 75

$wpdb->delete() $wpdb->delete( $table, $where, $where_format ) $wpdb->delete( $wpdb->posts, array( 'ID' => 5 ), array( '%d' ) ); Christian Ohlsson 76

$wpdb->prepare() Christian Ohlsson 77

$wpdb->prepare() $wpdb->prepare( " SELECT post_title FROM $wpdb->posts WHERE ID = %d ", $ID ); Hanterar strängar (%s) och integers (%d) Tar hand om all escaping Du behöver inte sätta %s inom och Christian Ohlsson 78

$wpdb->prepare() $wpdb->prepare( " DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s ", 420, 'Europe' ); Christian Ohlsson 79

$wpdb->prepare() $wpdb->prepare() snyggar till frågan, inte exekverar den! $wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s ", 420, 'Europe' ) ); För att se vad den gör: skriv ut det echo $wpdb->prepare( " DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s ", 420, 'Europe' ); Christian Ohlsson 80

Cross-Site Scripting (XSS) Vad innebär att escape a en sträng? Det innebär att du tar data som du redan har och säkrar den före du visar den för en användare Christian Ohlsson 81

Escaping esc_attr_e() 1 2 3 1. esc_ är prefixet för alla funktioner som escape ar saker 2. attr är den kontext som skall bli escape ad 3. _e är suffixet om du använder översättning Christian Ohlsson 82

Cross-Site Scripting (XSS) DÅLIGT <h1><?php echo $title;?></h1> Christian Ohlsson 83

Cross-Site Scripting (XSS) DÅLIGT <?php $title = "<script>alert('hello Europe!');</script>";?> <h1><?php echo $title;?></h1> Christian Ohlsson 84

Cross-Site Scripting (XSS) BRA <?php $title = "<script>alert('hello Europe!');</script>";?> <h1><?php echo esc_html( $title );?></h1> Christian Ohlsson 85

esc_attr() Används när du vill visa data i ett HTML element <input type="text" name="name" value="<?php echo esc_attr( $text );?>" /> http://codex.wordpress.org/function_reference/esc_attr Christian Ohlsson 86

esc_textarea() Används när du vill visa data i en <textarea> <textarea name="bio"> <?php echo esc_textarea( $bio);?> </textarea> http://codex.wordpress.org/function_reference/esc_textarea Christian Ohlsson 87

esc_url() Används när du vill validera och tvätta URL <a href="<?php echo esc_url( $url);?>">link</a> http://codex.wordpress.org/function_reference/esc_url Christian Ohlsson 88

absint() Konverterar en siffra till en positiv siffra $ID = absint( $_GET['ID'] ); <input type="text" name="number_posts" value= <?php echo absint( $number );?>" /> http://codex.wordpress.org/function_reference/absint Christian Ohlsson 89

intval() Returnerar en integer. Fungerar med negativa tal $ID = intval( $_GET['ID'] ); <input type="text" name="number_posts" value= <?php echo intval( $number );?>" /> http://php.net/manual/en/funclon.intval.php Christian Ohlsson 90

Sanera data Att sanera data innebär att du tar data och tvättar den ren Christian Ohlsson 91

Cross-Site Scripting (XSS) DÅLIGT <?php update_post_meta( 420, '_post_meta_key', $_POST['new_meta_value'] );?> Christian Ohlsson 92

sanitize_text_field() BRA <?php update_post_meta( 34, '_post_meta_key', sanitize_text_field( $_POST['new_meta_value'] ) );?> http://codex.wordpress.org/function_reference/sanitize_text_field Christian Ohlsson 93

Cross-site Request Forgery (CSRF) Exploit av en webbplats där elaka kommandon skickas från en användare som webbplatsen litar på Christian Ohlsson 94

Cross-site Request Forgery (CSRF) Nonces Action, object och user-specifika tidsstämplade hemliga nycklar Christian Ohlsson 95

Cross-site Request Forgery (CSRF) <?php if ( isset( $_POST['email'] ) ) { //process form data }?> <form method="post"> <input type="text" name="email /><br /> <input type="submit" name="submit" value="submit" /> </form> Man kan inte veta var $_POST[ email ] kommer ifrån! Christian Ohlsson 96

wp_nonce_field( $action, $name, $referer, $echo ); Formulär: <form method="post"> <?php wp_nonce_field( 'bw_process_email_action', 'bw_newsletter' );?> <input type="text" name="email" /><br /> <input type="submit" name="submit" value="submit" /> </form> View Source: <form method="post"> <input type="hidden" id="bw_newsletter" name="bw_newsletter" value="287de957e8" /> <input type="hidden" name="_wp_http_referer" value="/x/sample-page/" /> <input type="text" name="email" /><br /> <input type="submit" name="submit" value="submit" /> </form> http://codex.wordpress.org/function_reference/wp_nonce_field Christian Ohlsson 97

check_admin_referer($action, $query_arg ) Kontrollera koden: if ( isset( $_POST['email'] ) ) { check_admin_referer( 'bw_process_email_action', 'bw_newsletter' ); //process form data } http://codex.wordpress.org/function_reference/check_admin_referer Christian Ohlsson 98

Fixat exempel <?php if ( isset( $_POST['email'] ) ) { check_admin_referer( 'bw_process_email_action', 'bw_newsletter' ); //process form data }?> <form method="post"> <?php wp_nonce_field( 'bw_process_email_action', 'bw_newsletter' );?> <input type="text" name="email" /><br /> <input type="submit" name="submit" value="submit" /> </form> Christian Ohlsson 99

wp_nonce_url($actionurl, $action, $name ) $url = 'http://example.com/wp-admin/?id=5'; $url = wp_nonce_url( $url, 'bw_process_email_action', 'bw_newsletter' ); Ny URL: http://example.com/wp-admin/?id=5&bw_newsletter=287de957e8 http://codex.wordpress.org/function_reference/wp_nonce_url Christian Ohlsson 100

Nounces Specifika till: WordPress-användaren Vilken action som skall tas Objektet som vill ta nämnda action Tiden då det händer Christian Ohlsson 101

Mer att läsa Säkerhetsartiklar http://codex.wordpress.org/data_validation http://codex.wordpress.org/ Validating_Sanitizing_and_Escaping_User_Data http://wp.tutsplus.com/tutorials/7-simple-rules-wordpressplugin-development-best-practices/ http://wpengine.com/2013/05/brad-williams-on-securewordpress-development/ Säkerhetspresentationer http://wordpress.tv/2013/08/09/mike-adams-three-securityissues-you-thought-youd-fixed/ http://wordpress.tv/2013/09/26/brennen-byrne-employing-bestsecurity-praclces-for-wordpress-sites-3/ http://wordpress.tv/2011/01/29/mark-jaquith-theme-pluginsecurity/ Christian Ohlsson 102

Säkra din WordPress-installation Christian Ohlsson 103

#1 Uppdatera! Det första du skall göra är att uppdatera Wordpress ofta Minst veckovis Wordpress uppdateras ofta, och ofta är det för att säkerhetsmissar har gjorts Precis som all programvara Christian Ohlsson 104

#2 Byta ditt username Se till att du inte använder ett vanligt användarnamn Det ska inte vara lätt att räkna ut Admin är standard J Eget namn är bättre, men inte bäst Christian Ohlsson 105

#3 Välj ett starkt lösenord Starka lösenord är mycket viktiga Använd inte varianter av ditt namn, användarnamn, födelsedag, e-post, mobilnummer eller publikt Vanliga lösenord som många använder är också tabu Tänk långt, tänk svenskt! Christian Ohlsson 106

#4 Sätt gräns på antalet login-försök Enkelt och utmärkt sätt att skydda din blogg från brute force attacker Flera plugins finns Hur ofta skriver du fel lösenord flera gånger i rad? Flera = > 10 Christian Ohlsson 107

#5 Använd två-vägs-autentisering För att skydda verkligt viktig data Plugins finns för att koppla WP med exempelvis Google Authenticator Christian Ohlsson 108

#6 Byt tabell-prefixet Wordpress-tabeller börjar med wp_" som standard Innan du ändrar databasprefix: gör backup Öppna wp-config.php Byt $table_prefix = wp_'; Mot $table_prefix = wp_74rwg2u5_ ; Kan vara knepigt, du behöver aldrig tänka på det igen I phpmyadmin Döp om tabellerna Ex: wp_74rwg2u5_commentmeta Christian Ohlsson 109

#7 Göm versionen du kör För äldre Wordpress-versioner finns färdiga exploits Lägg först till denna kod till din functions.php fil: remove_action ('wp_head', 'wp_generator'); Döljer version i WP-headern Och dölj från RSS-läsare function crille_remove_version () { return''; } add_filter ('the_generator', 'crille_remove_version '); Christian Ohlsson 110

#8 Skydda wp-config.php Viktigaste konfigurationsfilen Du kan/bör flytta wp-config.php upp en nivå /var/www/crille/public_html/sajt/wp-config.php /var/www/crille/public_html/wp-config.php Christian Ohlsson 111

#9 Använd CAPTCHA Med CAPTCHA skyddas inloggningen rejält mot Brute-Force Kan även användas för kommentering Vissa CAPTCHA-plugin blockar IP efter ett antal inloggningsförsök Christian Ohlsson 112

#10 Använd säkerhetsplugins Better WP Security Innehåller flera olika säkerhetskontroller Bulletproof Security Skyddar sajt via.htaccess. All-in-one-wp-security-and-firewall Lägger en brandvägg på sajten Sucuri- Scanner Skannar din sajt efter malware osv. Wordfence Innehåller flera olika säkerhetskontroller Exploit Scanner Söker I databasen efter elak kod Christian Ohlsson 113

Christian Ohlsson 114