이 GPT 보안 모범 사례의 출처는 포크된 경우 이 팁을 사용하기 전에 업데이트를 찾아보세요!
AI 언어 모델을 좋아하는 저는 민감한 데이터가 다양한 애플리케이션에서 부주의하게 처리되는 방식에 종종 놀랐습니다. GPT에 대한 기대는 이해할 만하지만 민감한 정보를 부적절하게 처리하는 것은 클라이언트가 임대한 서버를 관리하는 관리자와 보안 전문가에게 심각한 문제를 야기합니다. 이 문서의 목적은 보안 취약성을 방지하고 민감한 데이터를 보호하기 위해 웹 애플리케이션에서 GPT를 안전하게 구현하는 모범 사례를 제공하는 것입니다.
이 문서의 목적은 웹 애플리케이션에서 GPT를 구현할 때 발생할 수 있는 보안 위험과 취약점을 간략하게 설명하고 이러한 위험을 완화하기 위한 모범 사례를 제공하는 것입니다.
<?php
$ api_key = " your_api_key_here " ;
$ request_url = " https://api.openai.com/v1/engines/davinci-codex/completions " ;
프런트엔드(JQuery를 사용한 JavaScript)
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
}
} ) ;
}
백엔드(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
API 키를 서버의 환경 구성에 추가하거나 .env 파일(PHP dotenv와 같은 라이브러리 사용)을 사용하여 환경 변수로 저장할 수 있습니다.
프로젝트의 루트 디렉터리에 .env 파일을 만듭니다.
GPT_API_KEY=your_api_key_here
Composer를 사용하여 vlucas/phpdotenv 패키지를 설치합니다.
composer require vlucas/phpdotenv
PHP 스크립트의 .env 파일에서 환경 변수를 로드합니다.
<?php
require_once ' vendor/autoload.php ' ;
use Dotenv Dotenv ;
$ dotenv = Dotenv:: createImmutable ( __DIR__ );
$ dotenv -> load ();
환경 변수에서 API 키에 액세스합니다.
<?php
$ api_key = getenv ( ' GPT_API_KEY ' );
$ request_url = " https://api.openai.com/v1/engines/davinci-codex/completions " ;
환경 변수를 사용하면 API 키가 안전하게 유지되고 소스 코드와 분리됩니다. .env 파일을 .gitignore 파일에 추가하여 실수로 공용 저장소에 커밋되는 것을 방지하세요.
백엔드(PHP)
<?php
// Sanitize user input before processing
$ inputText = filter_input ( INPUT_POST , ' input ' , FILTER_SANITIZE_STRING );
보안 통신을 위해 HTTPS 사용 웹 애플리케이션을 배포할 때 HTTPS를 사용하여 클라이언트와 서버 간의 통신을 암호화하여 중간자 공격을 방지해야 합니다.
API 요청 속도 제한 GPT API 키 남용을 방지하고 비용을 제어하려면 서버측 코드에 속도 제한을 구현하세요. 이렇게 하면 지정된 기간 내에 GPT API에 대한 요청 수가 제한됩니다.
백엔드(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
}
CSP(콘텐츠 보안 정책) 사용 CSP 헤더를 구현하여 사용자 에이전트가 특정 페이지에 대해 로드할 수 있는 리소스를 제어함으로써 XSS 공격 및 기타 취약점을 방지합니다.
보안 헤더 사용 X-Frame-Options, X-Content-Type-Options 등과 같은 보안 헤더를 구현하여 일반적인 보안 취약성으로부터 애플리케이션을 보호하세요.
GPT를 구현할 때 특정 사용 사례에 따라 적절한 API 엔드포인트를 선택하는 것이 중요합니다. OpenAI는 다양한 목적에 맞게 다양한 엔드포인트를 제공합니다. 현재 OpenAI 엔드포인트는 다음과 같습니다.
엔드포인트 | 모델명 |
---|---|
/v1/채팅/완료 | gpt-4, gpt-4-0314,gpt-4-0613, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-터보, gpt-3.5-turbo-0301, gpt-3.5-터보- 0613, gpt-3.5-터보-16k, gpt-3.5-터보-16k-0613. |
/v1/완성 | ada, ada-코드-검색-코드, ada-코드-검색-텍스트, ada-검색-문서, ada-검색-쿼리, ada-유사성, Babbage, Babbage-코드-검색-코드, Babbage-코드-검색- 텍스트, 배비지 검색 문서, 배비지 검색 쿼리, 배비지 유사성, 코드-다빈치-편집-001, 코드 검색-ada-코드-001, 코드-검색-ada-텍스트-001, 코드-검색-babbage-코드-001, 코드-검색-babbage-텍스트-001, 퀴리, 퀴리-instruct-베타, 퀴리- 검색 문서, 퀴리 검색 쿼리, 퀴리 유사성, davinci, davinci-instruct-beta, davinci-search-document, davinci-검색 쿼리, davinci-similarity, text-ada-001, text-babbage-001, text-curie-001, text-davinci-001, text-davinci-002, text-davinci-003, text-davinci- 편집-001, 텍스트 임베딩-ada-002, 텍스트-검색-ada-doc-001, 텍스트 검색-ada-query-001, 텍스트 검색-babbage-doc-001, 텍스트 검색-babbage-query-001, 텍스트 검색-curie-doc-001, 텍스트-검색-curie-query-001, 텍스트 검색-davinci-doc-001, 텍스트 검색-davinci-query-001, 텍스트 유사성-ada-001, 텍스트 유사성-배비지-001, 텍스트-유사성-퀴리-001, 텍스트-유사성-다빈치-001 |
/v1/편집 | 텍스트-davinci-edit-001, 코드-davinci-edit-001 |
/v1/오디오/녹음 | 속삭임-1 |
/v1/오디오/번역 | 속삭임-1 |
/v1/미세 조정 | 다빈치, 퀴리, 배비지, 에이다 |
/v1/임베딩 | 텍스트 임베딩-ada-002, 텍스트 검색-ada-doc-001, 텍스트 검색-ada-query-001, 텍스트 검색-babbage-doc-001, 텍스트 검색-babbage-query-001, 텍스트- 검색-퀴리-doc-001, 텍스트-검색-퀴리-쿼리-001, 텍스트-검색-davinci-doc-001, 텍스트 검색-davinci-query-001 |
/v1/조정 | 텍스트 조정-최신, 텍스트 조정-안정 |
엔드포인트마다 토큰당 또는 요청당 비용이 다릅니다. 예산에 맞는 엔드포인트를 선택하세요.
일부 엔드포인트는 더 빠른 응답 시간을 제공하는 반면 다른 엔드포인트는 과중한 작업에 더 적합합니다. 엔드포인트를 선택할 때 애플리케이션의 성능 요구 사항을 고려하십시오.
각 엔드포인트에는 고유한 강점과 약점이 있습니다. 애플리케이션의 고유한 요구 사항을 평가하고 이러한 요구 사항을 가장 잘 충족하는 엔드포인트를 선택하세요.
웹 애플리케이션에서 gpt-3.5-turbo 모델과 함께 /v1/chat/completions 엔드포인트를 사용하는 방법의 예입니다.
백엔드 PHP 스크립트에서 $request_url을 업데이트합니다.
<?php
$ api_key = getenv ( ' GPT_API_KEY ' );
$ request_url = " https://api.openai.com/v1/chat/completions " ;
GPT API에 요청을 보내는 함수를 만듭니다.
<?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 );
}
send_chat_completion_request() 함수를 호출하고 GPT API 응답을 처리합니다.
<?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 ' ];
}
이 예에서는 gpt-3.5-turbo 모델과 함께 /v1/chat/completions 엔드포인트를 사용하는 방법을 보여줍니다. send_chat_completion_request() 함수는 입력 텍스트와 함께 API에 요청을 보내고 생성된 응답을 받습니다. 그런 다음 어시스턴트의 응답이 프런트 엔드로 반환됩니다.
이 문서에 언급된 모범 사례를 이해하고 구현하는 데 도움이 될 수 있는 추가 리소스 및 참고 사항입니다.
S. Volkan Kücükbudak
이 프로젝트가 유용하다고 생각하고 지원하고 싶다면 다음과 같은 여러 가지 방법이 있습니다.
귀하의 지원에 감사드립니다! ❤️