Gewusst wie: ausblenden der Query-string-parameter in der URL
Ich habe eine Telerik grid in dem ich mich mit client-Vorlagen Bearbeiten/löschen Aktionen für jeden Datensatz. Also für den Bearbeiten - /löschen-Aktion, die ich brauchen, um passieren die id des Datensatzes zusammen mit der URL, hier in diesem Fall bin ich erschrocken über einige Fragen der Sicherheit. Ich bin auf der Suche nach einem Weg zu verbergen die query-string-parameter zu überwinden diese Probleme.
Ich bin mir bewusst über die Verschlüsselung des Parameters und momentan benutze ich das. Aber ich will vollständig zu verbergen die query-string-parameter. Ich kann nicht mit session/ViewBag hier, da kann ich nicht die session-Wert für jeden Datensatz in der Zeit von button und klicken Sie auf Zugriff im controller.
Jede Hilfe ist willkommen. Vielen Dank im Voraus. mein Controller-und View-codes sind die folgenden
Ansicht
@model IEnumerable<Data.Models.MyViewModel>
@{
Volunteer.Data.User currentUser = (Data.User)Session["CurrentUser"];
}
<div id="myDivId">
<p style="clear:none;">
@Html.ActionLink("Add", "Create", "MyController", new { area = "", ID = ViewBag.MyDataID }, new { @class = "aMyClass" })
</p>
@{
Html.Telerik().Grid<MyViewModel>().Name("MyGrid")
.Columns(col =>
{
col.Bound(c => c.FirstName).Width("120px");
col.Bound(c => c.LastName).Width("80px");
col.Bound(c => c.Designation).Width("80px");
col.Bound(c => c.Company).Width("80px");
col.Bound(c => c.Married).Filterable(false).ClientTemplate(
"<input type='checkbox'" + "<#= Married?\"checked\":\"\" #>" + " OnClick='return false' />"
).Width("40px");
if (currentUser.AdminRole == true || currentUser.Manager == true || currentUser.StaffRole == true)
{
col.Bound(c => c.EmployeeID).Sortable(false).ClientTemplate(
"<a href='" + Url.Content("~/MyController/Edit/") + "<#= EmployeeID #>' title='Edit Employee Details' class='edit'>Edit</a>" +
"<a href='" + Url.Content("~/MyController/Delete/") + "<#= EmployeeID #>' title='Delete Employee Details' class='delete'>Delete</a>"
).Title("Action").Width("75px");
}
else
{
col.Bound(c => c.EmployeeID).Sortable(false).ClientTemplate(
"<a href='" + Url.Content("~/MyController/Details/") + "<#= EmployeeID #>' title='Associated Party Details' class='details'>Details</a>"
).Title("Action").Width("75px");
}
})
.DataBinding(dataBinding => dataBinding.Ajax().Select("_GetEmployeeList", "MyController", new { id = "MyDataID" }))
.Pageable()
.Sortable()
.Render();
}
</div>
Controller
public ActionResult Edit(int id)//Want to pass this id without using Query string parameter
{
User user = (User)Session["CurrentUser"];
Employee employee = db.Employees.Single(c => c.EmployeeID == id);
//some code
return View(employee);
}
[HttpPost]
public ActionResult Edit(Employee employee)
{
User user = (User)Session["CurrentUser"];
if (ModelState.IsValid)
{
db.Employees.Attach(employee);
db.ObjectStateManager.ChangeObjectState(Employees, EntityState.Modified);
db.SaveChanges();
return RedirectToAction("Index");
}
Employee employee = db.Employees.Single(c => c.EmployeeID == id);
//some code
return View(employee);
}
- Tun Sie wirklich brauchen, um es zu übergeben, die als Teil der URL? Kannst du nicht ein POST-request statt?
- Wie kann ich mit einer POST-Anforderung hier? schauen Sie bitte auf meine controller-code. Ich brauche navigieren Sie zu einer anderen Ansicht von der Aktion Bearbeiten und Benutzer übernehmen Sie die änderungen dann in da bin ich mit post-Anforderung, um die änderungen zu Speichern. Dann navigieren Sie zurück in das Netz. Dies ist der Fluss der Betrieb hier
- Security through obscurity is no security at all. Anstatt es zu verbergen, Sie sollte die Authentifizierung der Benutzer und die überprüfung, dass Sie die entsprechende Rolle/Berechtigung zum anzeigen oder Bearbeiten der Mitarbeiter. So kann jeder sehen, aber die Url kann niemand verwenden Sie es in böser Absicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Query-string-Parameter sind Teil des HTTP-standard für die Verwendung der
GET
Methode, wie Sie sind Teil der URI.HTTP 1.1 Get-Anforderung
Bitte verstehen Sie, dass die GET-Methode standardmäßig sendet HIERFÜR gültigen Informationen in der URI zum Beispiel:
So versteckt dies bedeutet, dass müssen Sie entweder ändern Sie die Weise, die Sie machen die Anforderung oder ändern Sie den Typ der Anfrage.
Schafft eine Anker-Tag und Teil des Anker-tag ist ein Attribut ( href ), in dem die URI. Meines Wissens gibt es keinen Standard-Weg, um das überschreiben der URI zu übergeben Sie keine Informationen über den Querystring.
HTTP 1.1 Post-Anforderung
Dies ist eine ausgefallene Art zu sagen, senden Informationen an die URI. Aber dieses mal, können Sie entweder verwenden Sie die Querystring-oder mit dem Körper der Anfrage (die, soweit ich weiß, BEKOMMEN nicht erlauben einen Körper der Anfrage). Der Körper kann enthalten, nur über jede Art von mime-Typ, wird aber in der Regel application/x-www-form-urlencoded.
Also eine alternative Stück code:
Sein könnte:
Basierend auf die von Ihnen gestellte Frage, die ich sehr empfehlen, Lesen Sie auf MVC zu http://www.asp.net/mvc/overview/getting-started/introduction/getting-started.
Ich nicht weiß, wie query-strings komplett unsichtbar, aber ich kann Sie nicht mehr zugänglich für Sie.
Die generelle Idee die Idee ist, erstellen Sie mindestens zwei Wege, um die url mit dem query-string. In der Bahn(en) Sie wollen, dass die Leute zugreifen können, erstellen Sie eine temporäre Methode, die Weiterleitungen auf die Aktion, wo Sie wollen, um wieder Ihre Ansicht. Der 2. Weg wird der Zugang, die Handlung, die ich bereits erwähnt direkt. In der zwischen-Methode, Sie sagen, eine Datenbank zu erhöhen Sie den Wert von "hat diese Seite auf die zugegriffen wurde, bevor Sie zu 1.
Haben Sie vielleicht darüber nachdenken, den nächsten Teil für ein paar Stunden vor, warum es funktioniert 99% der Zeit. Am Ende der zwischen-Methode, stellen Sie den Wert wieder auf 0! In der Aktion, gibt eine Ansicht, die es so machen, dass die Ansicht, die Sie zurückgeben möchten, können nur zurückgegeben werden, wenn der Wert auf 0 gesetzt ist! Bevor jedoch der Ansicht zurückgegeben wird, setzen Sie den Wert auf 1! Während diese Methode ist nicht 100% sicher. Ich denke, es ist die einzige Implementierung, die verwendet nur die Grundlagen und die sehr wenig code. Obsfucating nicht gemacht query-string-urls zugegriffen werden. Es macht es nur schwieriger für die Menschen, um die website zugreifen.