PDA

View Full Version : حرفه ای: ارسال اطلاعات به کوئری بدون استفاده از تگ input



MohammadGh2011
یک شنبه 12 خرداد 1398, 02:07 صبح
بعد از سالیان سال درود

حقیقتش من از هیدن فیلد استفاده میکنم اما این راه از طریق inspect مرورگر قابل هک هست و کاربر میتونه هیدن رو به تکست تبدیل کنه و مقدار دیگه ای رو به دیتابیس بفرسته

چطور ممکنه بدون هیچ تگ input و بدون hidden field بشه این مقدار رو به کوئری post کرد؟

سپاس ویژه

ali_sed
یک شنبه 12 خرداد 1398, 11:25 صبح
سلام

هر دیتایی که از سمت کاربر ارسال بشه قابل تغییر است. مگر اینکه
1. دیتا را با یک اندیس رندم در سشن ذخیره کنید و فقط اندیس آن را در فیلد مخفی قرار دهید.
2. یا اینکه دیتای داخل فیلد هیدن را امضا کنید مثلا از jwt استفاده کنید. ( در این روش دیتا برای کاربر قابل نمایش است اما به انتهای دیتا یک عبارت به عنوان امضا اضافه شده است که در سمت سرور قابل بررسی است در صورت تغییر داده این امضا اعتبار خود را از دست می دهد)
3. دیتا را با یک الگوریتم معین کد کنید و در فیلد هیدن قرار دهید و در سمت سرور دیکد کنید.

cpuram
یک شنبه 12 خرداد 1398, 11:43 صبح
بعد از سالیان سال درود

حقیقتش من از هیدن فیلد استفاده میکنم اما این راه از طریق inspect مرورگر قابل هک هست و کاربر میتونه هیدن رو به تکست تبدیل کنه و مقدار دیگه ای رو به دیتابیس بفرسته

چطور ممکنه بدون هیچ تگ input و بدون hidden field بشه این مقدار رو به کوئری post کرد؟

سپاس ویژه
برای چه موردی دارید استفاده میکنید؟

MohammadGh2011
یک شنبه 12 خرداد 1398, 14:28 عصر
سلام

هر دیتایی که از سمت کاربر ارسال بشه قابل تغییر است. مگر اینکه
1. دیتا را با یک اندیس رندم در سشن ذخیره کنید و فقط اندیس آن را در فیلد مخفی قرار دهید.
2. یا اینکه دیتای داخل فیلد هیدن را امضا کنید مثلا از jwt استفاده کنید. ( در این روش دیتا برای کاربر قابل نمایش است اما به انتهای دیتا یک عبارت به عنوان امضا اضافه شده است که در سمت سرور قابل بررسی است در صورت تغییر داده این امضا اعتبار خود را از دست می دهد)
3. دیتا را با یک الگوریتم معین کد کنید و در فیلد هیدن قرار دهید و در سمت سرور دیکد کنید.

درود بر شما
من میخوام کلا فیدن فیلد نباشه دیگه ، وقتی کد هم بکنم باز میتونه هیدن فیلد رو در بیاره و مقدار دیگه ای رو بفرسته به سمت سرور
من جای هیدن فیلد متغیر گذاشتم ولی فراخوانی نمیشد. session گذاشتم نشد
لطفا با کد توضیح بدید ببینم
ممنون

MohammadGh2011
یک شنبه 12 خرداد 1398, 14:31 عصر
برای چه موردی دارید استفاده میکنید؟

درود بر شما
بنده تو صفحه اطلاعات جدول رو از تیبل میخونم بعد یک سری تغییرات داخلش انجام میدم و سپس با فشردن باتن اون اطلاعات تغییر کرده insert میشه در یک تیبل دیگه

MohammadGh2011
چهارشنبه 15 خرداد 1398, 00:46 صبح
خب ... ؟!!

peymang
چهارشنبه 15 خرداد 1398, 02:30 صبح
input hidden استفادش چیه ؟
اگه می خواید تغییری روی بخشی از اطلاعات انجام نشه اصلا چرا همه ی داده هایی که کاربر می فرسته رو داخل جدول جدیدتون درج می کنید می تونید از همون جدولی که الان دارید می خونید اطلاعاتی که باید تغییر نکنه رو بخونید و درج کنید

MohammadGh2011
چهارشنبه 15 خرداد 1398, 11:56 صبح
input hidden استفادش چیه ؟
اگه می خواید تغییری روی بخشی از اطلاعات انجام نشه اصلا چرا همه ی داده هایی که کاربر می فرسته رو داخل جدول جدیدتون درج می کنید می تونید از همون جدولی که الان دارید می خونید اطلاعاتی که باید تغییر نکنه رو بخونید و درج کنید


if (isset($_POST['btn_add'])) {

$query_insert = "INSERT INTO All_Orders(id_Customer,Flname_Customer, )
VALUES (N'$_POST[id_Hidden]', N'$_POST[flname_Hidden]' )";

mysqli_query($db, $query_insert
}






<form method="post" >
<input type="hidden" name="id_Hidden">
<input type="hidden" name="flname_Hidden">
<button type="submit" class="btn btn-danger " name="btn_add" </button>
</form


درود بر شما
ببین عزیز مثلا کد بالا ، من دارم یک سری تغییرات رو فیلدها توسط فیلدهای دیگه انجام میدم و مقدارش ریخته میشه تو هیدن فیلد و سپس POST میشه بالا که Insert شه. حالا نمیخوام از هیدن فیلد استفاده کنم که از طریق inspect قابل تغییر باشه
راه حل چیه؟

لطفا نمونه کد برام بیار ممنون

MohammadGh2011
جمعه 17 خرداد 1398, 11:09 صبح
متوجه منظورم شدید؟

sara_aryanfar
جمعه 17 خرداد 1398, 12:43 عصر
خب دوست گرامی یه المنت با خاصیت هیدن زمانی کاربرد داره که ما دیتایی رو در حد یک کلید می خواهیم در اون بزاریم تا موقت برای ما نگهش داره نه اینکه دیتا های حساس ما رو نگه داری کنه برای نگهداری موارد حساس بهتره از سشن استفاده کنید به نظرم نباید فرد بتونه با تغییر در این فیلد به ما آسیب بزنه از طرف دیگه شما باید و باید هر دیتایی که از سمت کاربر میاد رو چک کنید مهم نیست اونو رمز کرده باشید یا هر کار دیگه باید و باید اون رو یک بار از نظر وجود موارد مشکل دار چک کنید

plague
جمعه 17 خرداد 1398, 14:25 عصر
اگه میخای به جواب برسی باید درست توضیح بدی که برای چکاری میخای انجام بدی و چی تو فیلده مخفی هست و چکاری قراره روش انجام بشه
ولی در کل جوابت اینه که نباید از فیلد هیدن استفاده کنی اطلاعات حساسی که کاربر نباید بهشون دست بزنه رو هیچوقت تو فیلد هیدن نباید گزاشت

MohammadGh2011
شنبه 18 خرداد 1398, 00:44 صبح
درود بر شما

@plague (http://barnamenevis.org/member.php?123420-plague)
بزرگواران من خودم میدونم که نباید بریزم تو هیدن که اومدم اینجا
شما فقط لطف کنید بمن بفرمائید جای هیدن فیلد تو کدی که گذاشتم چی باید بزارم
برنامه ای رو فرض کن مثل ماشین حساب که طرف اعداد با علائم محاسباتی رو انتخاب میکنه و در نهایت حاصل بدست اومده باید در دیتابیس ذخیره بشه این حاصل بدست اومده رو چطور میشه در همون صفحه که محاسبات انجام میشه پاس داد به کد sql


@sara_aryanfar (http://barnamenevis.org/member.php?191209-sara_aryanfar)
عزیز سشن زدم نشد و نمیشناسه لطفا یک مثال بزنید رو کدی که قرار دادم و سشن رو پاس بدید به کد insert
همچنین متغیر هم تعریف کردن در قسمت هیدن فیلد اما جواب نمیده

MohammadGh2011
شنبه 18 خرداد 1398, 23:06 عصر
الان بازم مشکلی هست تو طرح سوال؟

ali_sed
یک شنبه 19 خرداد 1398, 00:15 صبح
فرض می کنیم وقتی کاربر دکمه سابمیت را کلیک می کند محاسبات انجام میشود و محتوای فرم با متد آجاکس ارسال می شود. می توانید از روش زیر استفاده کنید:
توجه: کدها تست نشده اند.


<form method="post" action="/test.php" >
<input type="text" name="other-field1">
<input type="text" name="other-field2">
<input type="text" name="other-field3">
<input type="submit" class="btn btn-danger " name="btn_add" value="submit" />
</form>

<script>
$("form").submit(function( event ) {
event.preventDefault();
var url = form.attr("action");
var formData = $(form).serializeArray();

//calculate hidden values
hiddenValue1 = calculateHiddenValue1();
hiddenValue2 = calculateHiddenValue2();

formData.push({hiddenValue1: hiddenValue2, hiddenValue2: hiddenValue2});

$.post(url, formData)
.done(function (response) {
alert(response);
})
.fail(function() {
alert( "error" );
});
});
</script>

به شما توصیه می کنم محاسبات را سمت سرور انجام دهید تا مطمئن شوید دیتا دستکاری نشده است. شما میتوانید فیلد هیدن را حذف کنید و به روش دیگری دیتا را ارسال کنید ولی باز هم کاربر میتواند با تغییراتی در برنامه محتوای متغییر را تغییر دهید.

MohammadGh2011
یک شنبه 19 خرداد 1398, 00:21 صبح
فرض می کنیم وقتی کاربر دکمه سابمیت را کلیک می کند محاسبات انجام میشود و محتوای فرم با متد آجاکس ارسال می شود. می توانید از روش زیر استفاده کنید:
توجه: کدها تست نشده اند.


<form method="post" action="/test.php" >
<input type="text" name="other-field1">
<input type="text" name="other-field2">
<input type="text" name="other-field3">
<input type="submit" class="btn btn-danger " name="btn_add" value="submit" />
</form>

<script>
$("form").submit(function( event ) {
event.preventDefault();
var url = form.attr("action");
var formData = $(form).serializeArray();

//calculate hidden values
hiddenValue1 = calculateHiddenValue1();
hiddenValue2 = calculateHiddenValue2();

formData.push({hiddenValue1: hiddenValue2, hiddenValue2: hiddenValue2});

$.post(url, formData)
.done(function (response) {
alert(response);
})
.fail(function() {
alert( "error" );
});
});
</script>

به شما توصیه می کنم محاسبات را سمت سرور انجام دهید تا مطمئن شوید دیتا دستکاری نشده است. شما میتوانید فیلد هیدن را حذف کنید و به روش دیگری دیتا را ارسال کنید ولی باز هم کاربر میتواند با تغییراتی در برنامه محتوای متغییر را تغییر دهید.
درود بر شما
غیر از اجکس راه حل دیگتون چیه
مثلا ذخیره در متغیر یا همین سشن ها
لطفا از اینها هم مثال بیارید
سپاس فراوان از شما

ali_sed
یک شنبه 19 خرداد 1398, 00:24 صبح
درود بر شما
غیر از اجکس راه حل دیگتون چیه
مثلا ذخیره در متغیر یا همین سشن ها
لطفا از اینها هم مثال بیارید
سپاس فراوان از شما

شما میتوانید قبل از سابمیت شدن فرم فیلد مورد نظر را به فرم اضافه کنید و بعد ارسال کنید:



$("#form").submit( function(eventObj) {
$("<input />").attr("type", "hidden")
.attr("name", "something")
.attr("value", "something")
.appendTo("#form");
return true;
});