Asegurar las solicitudes de Ajax en ASP.net a través de formularios web autenticados
security asp.net-ajax (1)
Si bien es trivial restringir cualquier método a los usuarios autenticados y autorizados, al exponer los id de db en las cadenas de consulta, se abre la posibilidad de que un usuario autenticado y autorizado pueda intentar acceder a los registros que no lo hicieron. Esto es particularmente así cuando los id de db son enteros o algún otro identificador fácilmente adivinado. El uso de Guids como id de db puede mitigar el riesgo de esto, aunque no del todo.
Lo que siempre debe recordar es NO CONFÍE EN LA ENTRADA. La seguridad a través de la oscuridad (es decir, el cifrado, etc.) no es una técnica confiable. Su servicio siempre debe verificar que el usuario actual pueda recuperar los registros que haya solicitado. A veces esto se conoce como seguridad de nivel de fila. Esto solo puede hacerse programáticamente.
por ejemplo, en lugar de solo determinar que alguien está autorizado para ver un registro, debe verificar que tienen derechos, de hecho, para acceder al registro que están solicitando.
Esto significa que necesita alguna forma de relacionar registros con un usuario autenticado.
Por cierto: cualquier solicitud HTTP está validada para entradas potencialmente peligrosas.
Espero que esto ayude,
Ya leí Asegurar las solicitudes AJAX a través de GUID y Asegurar una solicitud de Ajax . Ahora permítanme explicar mi escenario, a continuación se muestra un fragmento de código que puede ayudar a explicar en el tema.
[WebMethod[EnableSession = True]
[ScriptMethod]
public static string CreateTitle(string strTitleName)
{
string strResult = "Custom jSon string";
if(Session["Authorized"] == "True" && !String.IsNullOrEmpty(strTitleName))
{
String strTitle = Server.HtmlEncode(strTitleName);
InsertRecordInDB(strTitle);
strResult = "Custom jSOn string" + EncryptMD5("record id");
}
return strResult;
}
y debajo está la llamada javascript para enviar los parámetros. btnCreateTitle_click es el evento de clic del lado del cliente del botón. txtTitle es el cuadro de texto que acepta el nombre del título. Los validadores se crean en la página para validar también el cuadro de texto. Crear título es un método de página que llamo usando scriptmanager.
function btnCreateTitle_Click(evnt){
if(Page.ClientValidate()){
if($get("txtTitle")){
PageMethods.CreateTitle($get("txtTitle").value,success,failure,context);
}}}
El éxito de la función muestra un mensaje gruñido de que el título fue creado y muestra un enlace con una identificación de registro encriptada como cadena de consulta a la url para ver los detalles del título creado.
Ahora la pregunta candente
- ¿ES esto lo suficientemente seguro? ¿Qué me estoy perdiendo?
- ¿Cómo puedo hacer que el proceso sea más seguro y más rápido?