متجر الغربان يرسل سعر المنتج في طلب الشراء من المتصفح والخادم يحاسبك على السعر الذي وصله بدل أن يبحث عنه عنده فتدفع ما تريد
صفحة شراء في متجر الغربان المنتج سعره خمسمئة ريشة والسعر يرسل ضمن الطلب الخادم يصدق السعر القادم فتقدر تعدله في أداة الطلبات لتدفع أقل
لماذا نجح الحل
الخادم ائتمن قيمة يرسلها العميل في قرار مالي والسعر يجب أن يبحث عنه الخادم من كتالوجه لا أن يقبله من الطلب كل قيمة من العميل غير موثوقة
السبب الجذري
الخادم يحاسب على السعر القادم في الطلب بدل البحث عنه عنده الجذر الثقة في بيانات العميل لحساب المال
كيف يصلح الكود
لا تثق بسعر من العميل ابحث عنه في الخادم حسب معرف المنتج
الكود المصاب
app.post('/checkout', (req, res) => {
// Charges the price the client sent.
charge(req.body.price);
});
الكود الآمن
app.post('/checkout', (req, res) => {
// Look the price up on the server by item id; ignore any client price.
const price = catalogue.get(req.body.item).price;
charge(price);
});
الأثر في الواقع
العبث بالسعر يسمح بشراء شبه مجاني وقد استغل في متاجر حقيقية لطلب منتجات بأسعار زهيدة أو سالبة
كيف يكتشفها المدافعون
المدافع يحسب السعر في الخادم دائما ويرصد طلبات شراء بسعر لا يطابق الكتالوج