امنیت در PHP
تزریق اسکریپتهای سمت کاربر (Cross Site
Scripting)
در این گونه حملات مهاجم بر روی نقطه ضعف برنامه شما برای
کار با ورودی های کاربر که می توانند یک کد HTML
یا جاوااسکریپت باشند متمرکز می شود.
15000
<?PHP
$filename="aa";
if (isset($HTTP_POST_VARS['comment'])
and !empty($HTTP_POST_VARS ['comment'])){
if (!$handle = fopen($filename, 'a')) {
echo "Cannot open aa file";
exit;
}
if (fwrite($handle,
$_POST['comment']."\n") === FALSE) {
echo "Cannot write to file";
exit;
}
echo "Success";
fclose($handle);
}
?>
<form
action="" method="POST">
<p>
<textarea
name="comment" cols="50"></textarea>
</p>
<p>
<input
type="submit" name="Submit2" value="Submit">
</p>
</form>
<?PHP
$handle = @fopen($filename,
"r");
$contents = @fread($handle, filesize($filename));
echo nl2br($contents);
@fclose($handle);
?>
</span>
این برنامه یک ورودی از کاربر می گیرد و
آن را برروی یک فایل ذخیره می کند.سپس محتویات فایل را که ورودیکاربران است را
خوانده و بر روی صفحه نمایش میدهد.استفادهاز یک فایل برای ذخیره اطلاعات اینجا
صرفا برای ساده ترکردن اسکریپت بوده تا برنامه نویسان سایر زبان ها همبتوانند بدون
مشکل کد ها را متوجه شوند.فرق چندانی بین ایناسکریپت و اسکریپتی که از دیتابیس
برای ذخیره اطلاعاتاستفاده میکند در موضوع مورد بحث نیست.
تا اینجای کار همه چیز عادیست . حال بیایید
عبارت زیر را به برنامه بدهیم:
<H1>This is the HTML code
injection</H1>
همان گونه که مشاهده می کنید تگ H1
نیز بعنوان محتویات عبارت در فایل (یا دیتابیس) ذخیره شده است و در نمایش به علت
این که مرورگر آن را تفسیر می کند در فرمت خروجی تاثیر گذار خواهد بود.به سورس
خروجی برنامه نگاه کنید:
Success, wrote
<form
action="" method="POST">
<p>
<textarea
name="comment" cols="50"></textarea>