Fuente de estas mejores prácticas de seguridad de GPT, busque actualizaciones antes de utilizar estos consejos si está bifurcado.
Como entusiasta de los modelos de lenguaje de IA, a menudo me alarma la forma en que se manejan descuidadamente los datos confidenciales en diversas aplicaciones. Si bien el entusiasmo en torno a GPT es comprensible, el manejo inadecuado de información confidencial plantea desafíos importantes para los administradores y profesionales de la seguridad que administran servidores alquilados por los clientes. Este documento tiene como objetivo proporcionar mejores prácticas para implementar GPT de forma segura en aplicaciones web para prevenir vulnerabilidades de seguridad y proteger datos confidenciales.
El propósito de este documento es describir los riesgos y vulnerabilidades de seguridad que pueden surgir al implementar GPT en aplicaciones web y proporcionar mejores prácticas para mitigar estos riesgos.
<?php
$ api_key = " your_api_key_here " ;
$ request_url = " https://api.openai.com/v1/engines/davinci-codex/completions " ;
Interfaz (JavaScript con jQuery)
function sendRequest ( inputText ) {
$ . ajax ( {
url : 'backend.php' ,
type : 'POST' ,
data : { input : inputText } ,
success : function ( response ) {
// Process and display the response from GPT
} ,
error : function ( ) {
// Handle error cases
}
} ) ;
}
Programa de fondo (PHP)
<?php
$ api_key = " your_api_key_here " ;
$ request_url = " https://api.openai.com/v1/engines/davinci-codex/completions " ;
$ inputText = $ _POST [ ' input ' ];
// Process the input and send a request to GPT
// Return the response to the front-end
Puede almacenar su clave API como una variable de entorno agregándola a la configuración de entorno de su servidor o usando un archivo .env (con la ayuda de una biblioteca como PHP dotenv).
Cree un archivo .env en el directorio raíz de su proyecto:
GPT_API_KEY=your_api_key_here
Instale el paquete vlucas/phpdotenv usando Composer:
composer require vlucas/phpdotenv
Cargue las variables de entorno desde el archivo .env en su script PHP:
<?php
require_once ' vendor/autoload.php ' ;
use Dotenv Dotenv ;
$ dotenv = Dotenv:: createImmutable ( __DIR__ );
$ dotenv -> load ();
Acceda a la clave API desde las variables de entorno:
<?php
$ api_key = getenv ( ' GPT_API_KEY ' );
$ request_url = " https://api.openai.com/v1/engines/davinci-codex/completions " ;
Al utilizar variables de entorno, su clave API se mantendrá segura y separada de su código fuente. Recuerde agregar el archivo .env a su archivo .gitignore para evitar que se envíe accidentalmente a su repositorio público.
Programa de fondo (PHP)
<?php
// Sanitize user input before processing
$ inputText = filter_input ( INPUT_POST , ' input ' , FILTER_SANITIZE_STRING );
Utilice HTTPS para una comunicación segura Al implementar su aplicación web, asegúrese de utilizar HTTPS para cifrar la comunicación entre el cliente y el servidor, evitando ataques de intermediario.
Limite la tasa de solicitudes de API Para evitar el abuso de su clave API de GPT y controlar los costos, implemente una limitación de tasa en su código del lado del servidor. Esto limitará la cantidad de solicitudes realizadas a la API de GPT dentro de un período de tiempo específico.
Programa de fondo (PHP)
<?php
// Implement rate-limiting logic here
// ...
// Only proceed with the request if the rate limit is not exceeded
if ( $ is_rate_limit_ok ) {
// Send a request to GPT API
}
Utilice la política de seguridad de contenido (CSP) Implemente encabezados CSP para evitar ataques XSS y otras vulnerabilidades controlando los recursos que el agente de usuario puede cargar para una página determinada.
Utilice encabezados de seguridad Implemente encabezados de seguridad como X-Frame-Options, X-Content-Type-Options y otros para proteger su aplicación de vulnerabilidades de seguridad comunes.
Al implementar GPT, es fundamental seleccionar el punto final de API adecuado según su caso de uso específico. OpenAI proporciona varios puntos finales para diferentes propósitos. Estos son los puntos finales actuales de OpenAI:
PUNTO FINAL | NOMBRE DEL MODELO |
---|---|
/v1/chat/finalizaciones | gpt-4, gpt-4-0314,gpt-4-0613, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301, gpt-3.5-turbo- 0613, gpt-3.5-turbo-16k, gpt-3.5-turbo-16k-0613. |
/v1/compleciones | ada, ada-code-search-code, ada-code-search-text, ada-search-document, ada-search-query, ada-similitud, babbage, babbage-code-search-code, babbage-code-search- texto, documento-de-búsqueda-de-babbage, consulta-de-búsqueda-de-babbage, similitud-de-babbage, código-davinci-edit-001, código-búsqueda-ada-código-001, código-búsqueda-ada-text-001, código-búsqueda-babbage-código-001, código-búsqueda-babbage-text-001, curie, curie-instruct-beta, curie-search-document, curie-search-query, similitud-curie, davinci, davinci-instruct-beta, documento-de búsqueda-davinci, consulta-de-búsqueda-davinci, similitud-davinci, texto-ada-001, texto-babbage-001, texto-curie-001, texto-davinci-001, texto-davinci-002, texto-davinci-003, texto-davinci-edit-001, incrustación de texto-ada- 002, búsqueda-de-texto-ada-doc-001, búsqueda-de-texto-ada-consulta-001, búsqueda-de-texto-babbage-doc-001, búsqueda-de-texto-babbage-query-001, búsqueda-de-texto-curie-doc-001, búsqueda-de-texto-curie-query-001, búsqueda-de-texto-davinci-doc-001, búsqueda-de-texto-davinci-query-001, similitud-de-texto-ada-001, similitud-de-texto-babbage-001, texto-similitud-curie-001, texto-similitud-davinci-001 |
/v1/ediciones | texto-davinci-edit-001, código-davinci-edit-001 |
/v1/audio/transcripciones | susurro-1 |
/v1/audio/traducciones | susurro-1 |
/v1/afinaciones | davinci, curie, babbage, ada |
/v1/incrustaciones | incrustación-de-texto-ada-002, búsqueda-de-texto-ada-doc-001, búsqueda-de-texto-ada-query-001, búsqueda-de-texto-babbage-doc-001, búsqueda-de-texto-babbage-query-001, texto- búsqueda-curie-doc-001, búsqueda-texto-curie-consulta-001, búsqueda-texto-davinci-doc-001, búsqueda-de-texto-davinci-consulta-001 |
/v1/moderaciones | moderación de texto más reciente, moderación de texto estable |
Los diferentes puntos finales tienen diferentes costos por token o por solicitud. Elija un punto final que se ajuste a su presupuesto.
Algunos puntos finales ofrecen tiempos de respuesta más rápidos, mientras que otros son más adecuados para tareas pesadas. Considere las necesidades de rendimiento de su aplicación al seleccionar un punto final.
Cada punto final tiene sus propias fortalezas y debilidades. Evalúe los requisitos únicos de su aplicación y elija el punto final que mejor satisfaga esas necesidades.
Un ejemplo de cómo utilizar el punto final /v1/chat/completions con el modelo gpt-3.5-turbo en una aplicación web.
Actualice $request_url en su script PHP de back-end:
<?php
$ api_key = getenv ( ' GPT_API_KEY ' );
$ request_url = " https://api.openai.com/v1/chat/completions " ;
Cree una función para enviar una solicitud a la API de GPT:
<?php
function send_chat_completion_request ( $ api_key , $ request_url , $ messages ) {
$ ch = curl_init ();
$ data = array (
' model ' => ' gpt-3.5-turbo ' ,
' messages ' => $ messages
);
curl_setopt ( $ ch , CURLOPT_URL , $ request_url );
curl_setopt ( $ ch , CURLOPT_POST , 1 );
curl_setopt ( $ ch , CURLOPT_POSTFIELDS , json_encode ( $ data ));
curl_setopt ( $ ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ ch , CURLOPT_HTTPHEADER , array (
" Content-Type: application/json " ,
" Authorization: Bearer $ api_key "
));
$ response = curl_exec ( $ ch );
$ httpcode = curl_getinfo ( $ ch , CURLINFO_HTTP_CODE );
curl_close ( $ ch );
return array ( ' response ' => $ response , ' httpcode ' => $ httpcode );
}
Llame a la función send_chat_completion_request() y procese la respuesta de la API de GPT:
<?php
$ inputText = filter_input ( INPUT_POST , ' input ' , FILTER_SANITIZE_STRING );
$ messages = array (
array ( ' role ' => ' system ' , ' content ' => ' You are talking to a helpful assistant. ' ),
array ( ' role ' => ' user ' , ' content ' => $ inputText )
);
$ result = send_chat_completion_request ( $ api_key , $ request_url , $ messages );
if ( $ result [ ' httpcode ' ] == 200 ) {
$ json_response = json_decode ( $ result [ ' response ' ], true );
$ assistant_reply = $ json_response [ ' choices ' ][ 0 ][ ' message ' ][ ' content ' ];
// Return the response to the front-end
echo $ assistant_reply ;
} else {
// Handle error cases
echo " Error: " . $ result [ ' response ' ];
}
Este ejemplo muestra cómo utilizar el punto final /v1/chat/completions con el modelo gpt-3.5-turbo. La función send_chat_completion_request() envía una solicitud a la API con el texto de entrada y recibe la respuesta generada. Luego, la respuesta del asistente se devuelve al front-end.
Recursos y notas adicionales que podrían ser útiles para comprender e implementar las mejores prácticas mencionadas en este documento.
S. Volkan Kücükbudak
Si encuentra útil este proyecto y desea apoyarlo, hay varias formas de hacerlo:
¡Gracias por su apoyo! ❤️