<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ~~~ <?php namespace App\Services; class ApiValidatorService{ //具體來說,可以通過以下步驟來實現安全參數校驗: // //在接口請求中添加時間戳參數,例如:timestamp=1622945123 //在接口請求中添加隨機字符串參數,例如:nonce=abc123 //將所有請求參數按照參數名的字母順序排序,例如:nonce=abc123&timestamp=1622945123 //將排序后的參數按照“參數名=參數值”的格式拼接成一個字符串,例如:nonce=abc123&timestamp=1622945123 //將拼接后的字符串加上一個密鑰(可以是預先約定好的密鑰),例如:nonce=abc123&timestamp=1622945123&key=secret //對加密后的字符串進行哈希計算,例如使用 MD5 算法,得到一個簽名值,例如:c0c3f9a2a4c4c4dcd6d5b7b2a2e4d7b1。將簽名值添加到接口請求中,例如:nonce=abc123&timestamp=1622945123&signature=c0c3f9a2a4c4c4dcd6d5b7b2a2e4d7b1 //在接口服務端對接口請求進行校驗時,按照相同的算法計算簽名值,并與請求中的簽名值進行比對,如果一致,則說明請求合法,否則說明請求不合法 //通過以上步驟,可以有效地防止接口被惡意狂刷的攻擊。 public $secret = 'FjCpjxsdfSsdssddd; /** * 參數簽名 * @param array $params 所有的請求參數 * @param $sercet * @return string */ public function getSign(array $params,string $sercet):string{ if(isset($params['signature'])){ unset($params['signature']); }; ksort($params); $string = join('',$params); $string .= $sercet; return md5($string); } /**驗證簽名 * @param array $params * @param string $sercet * @return bool */ public function validateSignature(array $params,string $sercet):bool{ //判斷請求參數中是否有簽名字段,并且字段不能為空 if(empty($params['signature']) || empty($params['nonce']) || empty($params['timestamp'])) { return false; } //驗證簽名 if($this->getSign($params, $sercet) != $params['signature']) { return false; } return true; } } ~~~ ~~~ <?php namespace App\Http\Middleware; use App\Exceptions\ApiException; use App\Services\ApiValidatorService; use Closure; use Illuminate\Http\Request; class ApiCheckSign { public function handle(Request $request, Closure $next){ if( !$request->hasHeader('nonce') || !$request->hasHeader('timestamp') || !$request->hasHeader('signature')) { // 驗證沒通過 throw new ApiException('The verification failed!'); } $service = app(ApiValidatorService::class); $params['nonce'] = $request->header('nonce'); $params['timestamp'] = $request->header('timestamp'); $params['signature'] = $request->header('signature'); if (!$service->validateSignature($params, $service->secret)){ // 驗證沒通過 throw new ApiException('The verification failed!'); } return $next($request); } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看