php - origin - la credencial no se admite si la cabecera cors access control allow credentials es ''*''
permitir peticiones ajax de dominios cruzados (3)
Como dijo zerkms, si simplemente "van" a tu página de php, podrán ver lo que sea que esté saliendo. Si es posible (no estoy seguro), también permitirá que personas no deseadas creen sus propios formularios incluso en un host local y los envíen a través de AJAX para obtener las respuestas que desean. Si eso está bien para usted, y la información es ambigua / Inofensivo ... Entonces supongo que sería "seguro". NO es un método aceptable para obtener / transferir información confidencial
En mi proyecto, necesito permitir que otros envíen solicitudes ajax a mi script. Por lo tanto, las solicitudes externas pueden provenir de otros sitios web y dominios y tal vez de las extensiones del navegador.
He añadido simplemente estas dos líneas en la parte superior de mi script para que lo hagan:
header(''Access-Control-Allow-Origin: *'');
header(''Access-Control-Allow-Methods: GET, POST'');
Ahora mi pregunta es esta: ¿Hay alguna consideración de seguridad que haya pasado por alto? ¿Esta solución simple hace problemas serios?
Si es así, ¿cuál es la mejor solución?
Gracias por responder.
Como se mencionó anteriormente, cualquier persona puede enviar una solicitud a su página en cualquier momento: por lo tanto, las principales preocupaciones de seguridad que necesita son validar las opiniones de los usuarios y solo revelar información que esté disponible para el consumo público. Pero eso se aplica a todos los scripts.
Los dos problemas principales en los que necesita concentrarse (después de validar la entrada del usuario) son:
- El problema que puede tener es que los usuarios reciban la información en sus scripts. Dependiendo del navegador (e incluso entre sabores del mismo navegador) existen diferentes reglas de seguridad que les impiden recuperar la información. Una solución común a esto es proporcionar información de vuelta como "JSONP", que consiste en ajustar su valor de retorno como una llamada de función que puede ser ejecutada por el cliente. Aquí hay un ejemplo rápido (tomado de http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/ ). Para bloquearlo aún más, puede insistir en que todas las consultas son JSONP y rechazar a cualquiera que no envíe la función de devolución de llamada.
.
<?php
header(''content-type: application/json; charset=utf-8'');
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
echo $_GET[''callback''] . ''(''.json_encode($data).'')'';
?>
- Alguien abusa de tu servicio llamando con demasiada frecuencia. Las soluciones para esto son interceptar la dirección IP y rechazarla si recibe demasiadas llamadas de una dirección IP. No infalible, pero es un comienzo.
Otros factores a tener en cuenta:
- Las cookies y otros encabezados establecidos por su script probablemente serán ignorados
- lo mismo se aplica a las sesiones
private function set_headers() {
header("HTTP/1.1 ".$this->_code." ".$this->get_status_message());
header("Content-Type:".$this->_content_type);
header("Access-Control-Allow-Origin: *");
}