此 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、文本-巴贝奇-001、文本-curie-001、文本-达芬奇-001、文本-达芬奇-002、文本-达芬奇-003、文本-达芬奇-编辑-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、文本相似度-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
如果您发现该项目有用并想要支持它,有多种方法可以实现:
感谢您的支持! ❤️