Ataques CSRF y entre dominios

Todos vamos a vidas diferentes, con la esperanza de ganar algo más precioso que el dinero en los días en que no podemos ganar mucho dinero.

Problemas entre dominios

Inserte la descripción de la imagen aquí
El problema entre dominios ocurre cuando el navegador inicia una solicitud al backend y el backend devuelve datos al frontend. Por lo general, el back-end devolverá datos normalmente, pero el front-end determinará que la URL de los datos devueltos en este momento es diferente de la URL del proyecto de front-end por primera vez, y optará por negarse a aceptar En este momento, se ha producido un dominio cruzado. Esto también se debe a la política del mismo origen del navegador.

Entre dominios se refiere principalmente a la incoherencia del nombre de dominio, el puerto y la IP.

La política del mismo origen del navegador también evita algunos problemas de seguridad. La denominada homología se refiere al mismo "protocolo + nombre de dominio + puerto", incluso si dos nombres de dominio diferentes apuntan a la misma dirección IP, no son homólogos.

Si no hay una política del mismo origen, como un virus en la computadora del usuario, cuando el usuario visita el sitio web A, el virus insertará el comando para visitar el sitio web desconocido B en los datos antes de devolver los datos. En este momento, el sitio web B tomará la cookie del usuario normal para hacer algo desconocido, lo que provocará pérdidas de usuarios.

Varias soluciones entre dominios:
1. jsonp es entre dominios y solo puede darse cuenta de que la
<script>etiqueta de solicitud de obtención no se ve afectada por la política del mismo origen y la URL se escribe en la URL.

2.
Agregue Access-Control-Allow-Origin al encabezado de respuesta del lado del servidor CORS (Cross -Origin Resource Sharing)

3. Dominio cruzado de proxy Nginx

server {
        listen       8888; #自身监听8888端口
        server_name first;
        location / {
            charset utf-8;          #显示中文
            add_header 'Access-Control-Allow-Origin' '*'; #允许来自所有的访问地址
            add_header 'Access-Control-Allow-Credentials' 'true';  #设置为true才会发送cookie
            add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS'; #支持请求方式
            add_header 'Access-Control-Allow-Headers' 'Content-Type,*';
			if ($request_method = 'OPTIONS') {
				return 204;
			}
            proxy_pass http://127.0.0.1:8082; #匹配不到其他地址默认匹配的地址是访问 8080端口,本地node start启动的服务
        }
    }

Los proyectos front-end comúnmente resuelven dominios cruzados:

proxyTable: {
      '/api': {
        target: 'http://127.0.0.1:1000/', // 接口的域名
        changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
        pathRerite:{
          '^/api':'/api'
        }
      }
    }

Ataque CSRF

Un ataque CSRF también puede entenderse como un atacante que ha robado su identidad y luego envía una solicitud en su nombre. Lo que CSRF puede hacer incluye enviar correos electrónicos, enviar mensajes, robar su cuenta, incluso comprar bienes, transferencias de moneda virtual y luego simplemente divulgar su información de privacidad personal y la seguridad de su propiedad. Por lo tanto, la mayoría de los navegadores implementan restricciones de solicitud entre dominios. Esta es una defensa contra los ataques CSRF a nivel del navegador. Sin embargo, debe tenerse en cuenta que no es suficiente usar navegadores para defenderse de los ataques CSRF en un entorno de red complejo. También necesita iniciar la defensa desde el lado del servidor o del cliente.

Middleware

process_request
process_view
process_response
process_exception
process_render_template

¿Cómo se implementa el csrf del middleware?
django.views.decorators.csrf import csrf_exempt, csrf_protect (middleware comentó csrf, no se usa todo el sitio, agregue este método para indicar que una determinada función necesita autenticación)
en el método process_view: verifique si está decorado con @csrf_exempt ( exento de autenticación csrf) -go para solicitar Obtener token del cuerpo o cookies
FBV se puede agregar directamente @csrf_exempt @csrf_protect

django.utils.decorators.method_decorators

No es válido agregarlo al método correspondiente en CBV, debe agregarse al despacho y pasar csrf_exempt como parámetro a method_decorators

方法1:
class A:
	@method_decorators(csrf_exempt )
	def dispatch(self,request,*args,**kwargs)
		return super(.....)

方法2:
@method_decorators(csrf_exempt,name=dispatch )
class A:

Supongo que te gusta

Origin blog.csdn.net/qq_37304462/article/details/114333466
Recomendado
Clasificación