この GPT セキュリティ ベスト プラクティスのソースは、フォークされている場合は、これらのヒントを使用する前に更新を探します。
AI 言語モデルの愛好家として、私はさまざまなアプリケーションで機密データが不用意に扱われることにしばしば不安を感じます。 GPT に関する興奮は理解できますが、機密情報の不適切な取り扱いは、クライアントからレンタルされたサーバーを管理する管理者やセキュリティ専門家にとって大きな課題となります。このドキュメントは、Web アプリケーションに GPT を安全に実装してセキュリティの脆弱性を防ぎ、機密データを保護するためのベスト プラクティスを提供することを目的としています。
このドキュメントの目的は、Web アプリケーションに 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 キーを環境変数として保存するには、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-ターボ、gpt-3.5-turbo-0301、gpt-3.5-turbo- 0613、gpt-3.5-ターボ-16k、 gpt-3.5-ターボ-16k-0613。 |
/v1/completions | ada、ada コード検索コード、ada コード検索テキスト、ada 検索ドキュメント、ada 検索クエリ、ada 類似性、バベッジ、バベッジ コード検索コード、バベッジ コード検索-テキスト、バベッジ検索ドキュメント、バベッジ検索クエリ、バベジ類似性、コード davinci-edit-001、 code-search-ada-code-001、code-search-ada-text-001、code-search-babbage-code-001、code-search-babbage-text-001、curie、curie-instruct-beta、curie-検索ドキュメント、キュリー検索クエリ、キュリー類似性、ダヴィンチ、ダヴィンチ命令ベータ、 davinci-search-document、davinci-search-query、davinci-similarity、text-ada-001、text-babbage-001、text-curie-001、text-davinci-001、text-davinci-002、text-davinci- 003、テキスト-ダヴィンチ-編集-001、テキスト-埋め込み-ADA-002、 text-search-ada-doc-001、text-search-ada-query-001、text-search-babbage-doc-001、text-search-babbage-query-001、text-search-curie-doc-001、テキスト検索-キュリー-クエリ-001、テキスト検索-ダヴィンチ-doc-001、テキスト検索-ダヴィンチ-クエリ-001、テキスト類似性-ada-001、テキスト類似性-バベッジ-001、テキスト類似性-キュリー-001、テキスト類似性-ダヴィンチ-001 |
/v1/編集 | テキスト-davinci-edit-001、code-davinci-edit-001 |
/v1/オーディオ/文字起こし | ささやき-1 |
/v1/オーディオ/翻訳 | ささやき-1 |
/v1/微調整 | ダヴィンチ、キュリー、バベッジ、エイダ |
/v1/embeddings | text-embedding-ada-002、text-search-ada-doc-001、text-search-ada-query-001、text-search-babbage-doc-001、text-search-babbage-query-001、text- search-curie-doc-001、text-search-curie-query-001、text-search-davinci-doc-001、テキスト検索-ダヴィンチ-クエリ-001 |
/v1/モデレーション | テキストモデレーション最新、テキストモデレーション安定 |
エンドポイントが異なれば、トークンごとまたはリクエストごとのコストも異なります。予算内に収まるエンドポイントを選択してください。
一部のエンドポイントはより高速な応答時間を提供しますが、他のエンドポイントは負荷の高いタスクにより適しています。エンドポイントを選択するときは、アプリケーションのパフォーマンスのニーズを考慮してください。
各エンドポイントには独自の長所と短所があります。アプリケーション固有の要件を評価し、それらのニーズに最適なエンドポイントを選択します。
Web アプリケーションで 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. ヴォルカン・キュチュクブダク
このプロジェクトが役立つと感じてサポートしたい場合は、いくつかの方法があります。
ご支援ありがとうございます! ❤️