Securitatea web in PHP

15

Click here to load reader

description

Cateva notiuni legate de securitatea aplicatiilor in PHP 4

Transcript of Securitatea web in PHP

Page 1: Securitatea web in PHP

Securitatea Web in

[email protected]

Page 2: Securitatea web in PHP

Ce este securitatea?

Este o masura si nu o caracteristica

Securitatea este echivalenta cu scump

Trebuie sa faca parte din designul

aplicatiei

Este doar o parte a solutie si nu face parte

neaparat din solutie

Page 3: Securitatea web in PHP

Pasi de baza

Luati în consideratie folosirile nelegitime

ale aplicatia dvs.

Educati-va (studiu www.php.net)

Filtrati toate datele care intra in aplicatie

Page 4: Securitatea web in PHP

Register Globals = off

<?php

if (authenticated_user()) {

$authorized = true;

}

if ($authorized) {

include '/highly/sensitive/data.php';

}

?>

<?php

include "$path/script.php";

?>

Page 5: Securitatea web in PHP

Filtrarea Datelor

Filtrul de securitate trebuie sa nu poata fi

trecut

Aveti grija ca datele invalide sa nu fie

interpretate ca date valid

Identificati originea datelor

Page 6: Securitatea web in PHP

Testarea datelorhttp://example.org/dispatch.php?task=print_form

<?php

/* Global security measures */

switch ($_GET['task']) {

case 'print_form':

include '/inc/presentation/form.inc';

break;

case 'process_form':

$form_valid = false;

include '/inc/logic/process.inc';

if ($form_valid) {

include '/inc/presentation/end.inc';

} else {

include '/inc/presentation/form.inc';

}

break;

default:

include '/inc/presentation/index.inc';

break;

}

?>

Page 7: Securitatea web in PHP

Metoda Include

<?php

switch ($_POST['form']) {

case 'login':

$allowed = array();

$allowed[] = 'form';

$allowed[] = 'username';

$allowed[] = 'password';

$sent = array_keys($_POST);

if ($allowed == $sent) {

include '/inc/logic/process.inc';

}

break;

}

?>

Page 8: Securitatea web in PHP

Metoda Include

<form action="/receive.php" method="POST">

<input type="hidden" name="form" value="login" />

Username: <input type="text" name="username" />

Password: <input type="password" name="password" />

<input type="submit" />

</form>

Page 9: Securitatea web in PHP

Exemplu de filtrare

<?php

$clean = array();

$email_pattern = '/^[^@\s<&>]+@([-a-z0-9]+\.)+[a-z]{2,}$/i';

if (preg_match($email_pattern, $_POST['email'])) {

$clean['email'] = $_POST['email'];

}

?>

Page 10: Securitatea web in PHP

Verificarea unei culori

<?php

$clean = array();

switch ($_POST['color']) {

case 'red':

case 'green':

case 'blue':

$clean['color'] = $_POST['color']; break;

}

?>

Page 11: Securitatea web in PHP

Verificarea unui numar

<?php

$clean = array();

if ($_POST['num'] == strval(intval($_POST['num']))) {

$clean['num'] = $_POST['num'];

}

?>

<?php

$clean = array();

if ($_POST['num'] == strval(floatval($_POST['num']))) {

$clean['num'] = $_POST['num'];

}

?>

Page 12: Securitatea web in PHP

Functii

htmlentities()

strip_tags()

and utf8_decode()

Expresii regulate

Page 13: Securitatea web in PHP

Verificarea stricta a campurilor

Nume (caractere + spatii)

Email

Telefon

Adresa Web

Etc.

Page 14: Securitatea web in PHP

Alte observatii

Verificati de unde vine cererea (referrerul)

Folositi sesiuni

Folositi $_GET, $_POST, etc.

Tinerea sesiunilor in baza de date

Page 15: Securitatea web in PHP

SQL Injection

INSERT INTO users (reg_username, reg_password, reg_email) VALUES

('{$_POST['reg_username']}', '$reg_password', '{$_POST['reg_email']}‘)

"INSERT INTO users (reg_username, reg_password, reg_email) VALUES

('bad_guy', 'mypass', ''), ('good_guy', '1234', '[email protected]')

Prin folosirea addslashes se elimina aceasta problema!