حمله Web Parameter Tampering یا جعل پارامتر ها

1. عموما در Html Form ها یک سری فیلد های hidden وجود دارد. مثلا فیلدی به صورت hidden وجود دارد که محتوی آن id چیزی است که در این فرم می توانیم ویرایش کنیم. عموما این فیلد ها هنگامی که فرم به سمت سرور submit می شود، کمک می کنند که بدانیم چه چیزی را باید در سمت سرور تغییر بدهیم و یا واکشی کنیم.
2. آسیب پذیری عمده وب سایت ها در این جاست که هر کسی می تواند این فیلد های hidden را در سمت مرورگر دستکاری کند. مثلا با تغییر id به موجودیت دیگری (که مجاز نیست) اشاره کند و سپس فرم را submit کند.
3. در این صورت احتمال اینکه شخص مهاجم، داده هایی را دستکاری کند که بدان ها دسترسی نداشته خیلی بالا خواهد بود. همچنین بی نظمی و آسفتگی هایی در داده ها به وجود خواهد آمد که علت شان به سادگی قابل تشخیص نخواهد بود.

به این اتفاق حمله جعل پارامترها گفته می شود که به نظرم با خیال راحت می توانیم بگوییم خیلی از وب سایت های ایرانی نسبت به آن آسیب پذیر هستند.

راه حل ها:

اصلی در تامین امنیت نرم افزار های مبتنی بر وب وجود دارد با نام Don't trust user input یعنی هیچگاه به هیچ داده ای که از سمت کاربران می آید اعتماد نکن. https://www.owasp.org/index.php/Don't_trust_user_input

1. راه حل اول آن است که بر اساس تمام پارامترهایی که کاربر نباید بتواند دستکاری کند یک مقدار hash تولید کنیم. برای امنیت بیشتر بهتر است تابع hash، به عنوان پارامتر ورودی، مشخصاتی از session کاربر هم دریافت کند تا این مقدار برای کاربران و session های مختلف، توفیر داشته باشد.
مقدار hash تولید شده را هم به عنوان یک فیلد hidden در فرم قرار می دهیم. سپس وقتی که فرم از سمت کاربر برای سرور submit شد، باید مجددا بر اساس فرمول قبلی (پارامترهای مخفی فرم و session کاربر) مقدار hash را تولید کرده و با مقداری که در فرم قرار داده بودیم مقایسه کنیم. بدین صورت دستکاری های غیر مجاز را می توانیم بی اثر کنیم.
2. مورد بعدی برای جلوگیری از دستکاری داده ها آن است که پیش از اعمال هر تغییری که در وضعیت سیستم داده می شود باید بررسی کنیم که آیا این تغییر مجاز هست که از سمت این کاربر اعمال شود یا خیر.

https://www.owasp.org/index.php/Web_Parameter_Tampering