此 GPT 安全最佳實踐的來源是在使用這些提示之前查找更新(如果它已分叉)!
身為一名人工智慧語言模型愛好者,我經常對各種應用程式中敏感資料處理不慎的方式感到震驚。雖然圍繞 GPT 的興奮是可以理解的,但敏感資訊的不當處理給管理客戶租用伺服器的管理員和安全專業人員帶來了重大挑戰。本文檔旨在提供在 Web 應用程式中安全實施 GPT 的最佳實踐,以防止安全漏洞並保護敏感資料。
本文檔的目的是概述在 Web 應用程式中實施 GPT 時可能出現的安全風險和漏洞,並提供減輕這些風險的最佳實踐。
<?php
$ api_key = " your_api_key_here " ;
$ request_url = " https://api.openai.com/v1/engines/davinci-codex/completions " ;
前端(JavaScript 和 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
}
} ) ;
}
後端(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 進行安全通訊 部署 Web 應用程式時,請確保使用 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-turbo、gpt-3.5-turbo-0301、gpt-3.5-turbo- 0613、gpt-3.5-turbo-16k、gpt-3.5-turbo-16k-0613。 |
/v1/完成次數 | ada、ada-代碼-搜尋-代碼、ada-代碼-搜尋-文字、ada-搜尋-文件、ada-搜尋-查詢、ada-相似性、巴貝奇、巴貝奇-代碼-搜尋-代碼、巴貝奇-代碼-搜尋-文字、巴貝奇搜尋文件、巴貝奇搜尋查詢、巴貝奇相似性、代碼達文西編輯 001、代碼搜尋 ada 代碼 001、代碼搜尋 ada 文字 001、代碼搜尋巴貝奇碼001、程式碼搜尋巴貝奇文字001、居禮、居禮指令測試版、居禮搜尋文件、居禮搜尋查詢、居禮相似度、達文西、達文西指令測試版、達文西-搜尋文件、達文西搜尋查詢、達文西相似度、文字-ada-001、文字-babbage-001、文字-curie-001、文字-達文西-001、文字-達文西-002、文字-達文西-003、文字-davinci-edit-001、文字嵌入-ada-002、文字搜尋-ada-doc-001、文字搜尋-ada-query-001、文字搜尋-babbage-doc- 001、文字搜尋-巴貝奇-查詢-001,文字-搜尋-curie-doc-001,文字-搜尋-curie-query-001,文字-搜尋-達文西-doc-001,文字-搜尋-達芬奇-查詢-001,文本-相似性- ada-001、文本相似度-babbage-001、文本相似度-curie-001、文本相似度-davinci-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、文字-搜尋-curie-doc -001、文字搜尋-curie-query-001、文字搜尋-davinci-doc-001、文字搜尋-davinci-query-001 |
/v1/節制 | 文本審核最新、文本審核穩定 |
不同的端點每個令牌或每個請求的成本不同。選擇適合您預算的端點。
有些端點提供更快的回應時間,而有些端點則更適合繁重的任務。選擇端點時請考慮應用程式的效能需求。
每個端點都有自己的優點和缺點。評估您的應用程式的獨特需求並選擇最能滿足這些需求的端點。
有關如何在 Web 應用程式中將 /v1/chat/completions 端點與 gpt-3.5-turbo 模型結合使用的範例。
更新後端 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 ' ];
}
此範例示範如何將 /v1/chat/completions 端點與 gpt-3.5-turbo 模型結合使用。 send_chat_completion_request() 函數使用輸入文字向 API 發送請求並接收產生的回應。然後助理的回復返回到前端。
其他資源和註釋可能有助於理解和實施本文檔中提到的最佳實踐。
S. Volkan Kücükbudak
如果您發現該專案有用並且想要支持它,有多種方法可以實現:
感謝您的支持! ❤️