PDA

View Full Version : سوال: در مورد action فرم



lady64
پنج شنبه 24 فروردین 1391, 09:41 صبح
وقتی در فرم ها action رو بصورت
$_SERVER['PHP_SELF'] تعریف میکنیم باعث میشه صفحه به خودش برگرده.چه تفاوتی داره با وقتی که action رو خالی میزاریم ؟ چون این هم باعث میشه به همین صفحه ی جاری برگرده.

mtchabok
پنج شنبه 24 فروردین 1391, 10:37 صبح
سلام
زمانیکه action رو خالی میزارین در تمام مرورگرها به صفحه فعلی اشاره میکنه .
از مقدار php self هم سعی کنید استفاده نکنید چونکه مشکلات امنیتی داره . در ضمن این متغیر هم آدرس صفحه فعلی رو برمیگردونه .

MMSHFE
پنج شنبه 24 فروردین 1391, 11:23 صبح
بهتره action فرم رو خالی بگذارین اما اگه میخواین با PHP مقداردهی کنید، پیشنهاد میکنم از ['SERVRE['SCRIPT_NAME_$ استفاده کنید. برای اینکه بهتر متوجه بشین با مثال توضیح میدم. فرض کنید چنین فرمی دارین:


<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="name"/><br/>
<input type="submit" name="submit" value="Submit Form"/><br/>
</form>
و اسم فایل کد شما هم form-action.php هست که توی سایت شما به نشانی mysite.com ذخیره شده. بنابراین PHP_SELF حاوی این مقدار خواهد بود:

http://www.mysite.com/form-action.php
خوب حالا ببینیم هکر چطور میتونه از این روش طراحی فرمتون سوء استفاده کنه. فرض میکنیم هکر توی آدرس چنین چیزی وارد کنه:

http://www.mysite.com/form-action.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Cfoo%22
اونوقت چه اتفاقی میفته؟ PHP_SELF حاوی این مقدار خواهد بود:

http://www.mysite.com/form-action.php"><script>alert('xss')</script><foo"
که باعث میشه فرم شما این شکلی بشه:


<form method="post" action="http://www.mysite.com/form-action.php">
<script>alert('xss')</script><foo"">
<input type="text" name="name"/><br/>
<input type="submit" name="submit" value="Submit Form"/><br/>
</form>
دیگه خودتون تا ته قضیه رو بخونید! وقتی JS رو بشه درج کرد، هر کاری میشه انجام داد. مثلاً یک تابع تعریف بشه که همه مقادیر واردشده توی فرم رو برای سایت خاصی میفرسته و اون تابع قبل از submit فرم صدا زده بشه. برای جلوگیری از این مشکلات، یا از SCRIPT_NAME که گفتم استفاده کنید یا از __FILE__ و یا اینکه هرجا توی کدتون PHP_SELF رو خواستین echo یا eval کنید، اینطوری ازش استفاده کنید:

echo htmlentities($_SERVER['PHP_SELF']);
تا کدهای خطرناکش Escape بشن.
موفق باشید.