ورود

View Full Version : سوال: تغییر مقدار



parsdarab
جمعه 12 شهریور 1395, 18:14 عصر
سلام دوستان
آیا کد زیر را می توان تغییر داد و آون را پست کرد

@Html.HiddenFor(model => model.ConfirmAnswer)

فرضا یک فیلد مخفی در فرم داریم می خواهیم قبل از ارسال به سرور اونو تغییر بدیم بعد بفرستیم

اگه جواب بله هست؟:ناراحت:چطور میشه تغییرش داد راهنمایی بفرمایید.
اگه نمیشه هم هیچی:لبخند:

Moien Tajik
جمعه 12 شهریور 1395, 18:36 عصر
از توی Controller وقتی دریافتش میکنید خب تغییرش بدید .


[HttpPost]
public ActionResult Test(model modelData)
{
modelData.ConfirmAnswer = false;
// ...
}

parsdarab
جمعه 12 شهریور 1395, 21:51 عصر
نه منظورم اینه که اگه اینو این طوری توی فرم بزاریم قابل هک هست یا نه؟

Moien Tajik
جمعه 12 شهریور 1395, 22:36 عصر
اگر در بالای Controller :


[ValidateAntiForgeryToken]



و در ویو بعد از شروع فرم :


@Html.AntiForgeryToken()


رو قرار بدی قابل هک نیست .

این آموزش کوتاه رو هم حتما ببین : http://bit.do/csrfProtect

parsdarab
سه شنبه 30 شهریور 1395, 18:09 عصر
سلام اگه در کدهامون خواستیم به صورت زیر داده ارسال کنیم
یعنی فرم چیزی نباشه از طریق جی کوئری داده را بخونیم و اونا را به یک اکشن پاس بدیم مثلا کد زیر


function deleteRecord(url, Ids, grid, typeMassage) {

$.ajax({
url: url,
type: "post",
contentType: 'application/json',
//در این قسمت باید نام متغیر در اکشن حذف یکسان باشد
data: JSON.stringify({
Ids: Ids,
}),
headers: {
'RequestVerificationToken': '@TokenHeaderValue()'
}
//data: AddAntiForgeryToken({ Ids: Ids }),
}).done(function (result) {
//debugger;

البته از یک مقاله هم کمک گرفتم باز جواب نگرفنم


@functions{
public string TokenHeaderValue()
{
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
}
}

Moien Tajik
چهارشنبه 31 شهریور 1395, 01:13 صبح
http://stackoverflow.com/a/7273075

parsdarab
شنبه 03 مهر 1395, 14:20 عصر
سلام
مشکلی که پیش میاد اینکه مقدار در جای دیگه ست میشه
142743

نباید این طور باشه
من میخام این مقدار داخل کوکی ست بشه

parsdarab
سه شنبه 06 مهر 1395, 23:02 عصر
با استفاده از کلاس زیر


/// <summary>
/// تشخیص معتبر بودن داده ها
/// </summary>
public class ValidateAntiForgeryTokenOnAllPostsAttribute : AuthorizeAttribute
{
/// <summary>
/// Executes authorization based on anti-forge token.
/// </summary>
/// <param name="filterContext">MVC pipeline filter context.</param>
public override void OnAuthorization(AuthorizationContext filterContext)
{

var request = filterContext.HttpContext.Request;

// Only validate POSTs
if (request.HttpMethod == WebRequestMethods.Http.Post)
{
// Ajax POSTs and normal form posts have to be treated differently when it comes to validating the AntiForgeryToken
if (request.IsAjaxRequest())
{
var antiForgeryCookie = request.Cookies[AntiForgeryConfig.CookieName];

var cookieValue = antiForgeryCookie != null
? antiForgeryCookie.Value
: null;
var tokenForm = request.Headers["__RequestVerificationToken"];
try
{
AntiForgery.Validate(cookieValue, tokenForm);
}
catch (Exception)
{
var result = new JsonResult();
result.Data = new { status = false, message = @Resource.Message.ErrorAntiForgery };
filterContext.Result = result;
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.ExpectationFailed;
//http://stackoverflow.com/questions/3694977/asp-net-mvc-where-to-throw-the-exceptions
//throw new HttpException(417, "customAuthorize 417");
}
}
else
{
new ValidateAntiForgeryTokenAttribute().OnAuthorizatio n(filterContext);
}
}

}
}

و قرار دادن کد زیر در قسمت ویو


<form id="__AjaxAntiForgeryForm" action="#" method="post"> @Html.AntiForgeryToken() </form>



و قرار دادن کد زیر قبل فرستادن در خواست ایجکسی

var token = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').attr('value');
var headers = {};
headers['__RequestVerificationToken'] = token;


$.ajax({
url: url,
type: "post",
contentType: 'application/json',
//در این قسمت باید نام متغیر در اکشن حذف یکسان باشد
data: JSON.stringify({
Ids: Ids,
}),

headers: headers,

حل شد