久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

插件更新:保護下載鏈接

給你的下載鏈接添加授權,方便你出售你的任何文件

自發布插件更新檢查器庫以來,提出的最常見問題之一是:“如何保護我的下載鏈接,以便只有購買了我的插件的用戶才能下載更新?”

在本文中,我將嘗試在使用WP Update Server提供插件更新的上下文中回答該問題。我還將從我的一個商業插件中提供一些實際示例。

讓我們開始吧。有許多方法可以確保更新下載的安全,但是大多數方法可以歸結為:

  1. 給每個用戶某種安全令牌。這可以是會員站點的登錄名+密碼,許可證密鑰,或者更深奧的東西。
  2. 每當有人在其站點上安裝您的插件時,都要求他們輸入密鑰/登錄/以其他方式輸入。
  3. 修改插件以將令牌附加到每個更新請求。
  4. 編寫一個服務器腳本,該腳本在允許下載之前驗證令牌。

選擇一個安全令牌

實施前兩個步驟的方式會因插件UI以及所使用的在線商店,購物車軟件或成員資格插件而有很大差異。您可能已經存在某種客戶身份驗證機制,只需要進行一些調整即可用于更新,或者您可能需要從頭開始構建自己的身份驗證機制。這里沒有“一刀切”的解決方案。

就個人而言,我更喜歡使用許可證密鑰。每當有人購買我的Admin Menu Editor Pro插件時,訂單處理腳本都會生成一個隨機密鑰,將其存儲在數據庫中,然后將密鑰和下載鏈接發送到客戶的電子郵件中。然后,當他們安裝插件時,將提供一個輸入許可證密鑰的鏈接。

我不會在此處包括許可證管理代碼,因為它不在本文的討論范圍內,而是為該特定插件構建的,但是用戶界面看起來像這樣(單擊放大):

插件更新:保護下載鏈接
插件更新:保護下載鏈接

將令牌添加到更新請求

現在,我們如何將安全令牌添加到每個更新請求中?您可以使用addQueryArgFilter($callback)更新檢查器的方法來執行此操作。回調函數將接收查詢參數的關聯數組。只需將令牌添加到列表中并返回修改后的數組即可。

這是一個例子:

/* ... Code that initializes the update checker ... */
 
//Add the license key to query arguments.
$updateChecker->addQueryArgFilter('wsh_filter_update_checks');
function wsh_filter_update_checks($queryArgs) {
    $settings = get_option('my_plugin_settings');
    if ( !empty($settings['license_key']) ) {
        $queryArgs['license_key'] = $settings['license_key'];
    }
    return $queryArgs;
}

使用令牌授權下載

最后,讓更新服務器在允許用戶下載更新之前驗證安全令牌。為此,您需要創建一個自定義服務器類(請參閱擴展服務器)并至少重寫該

Wpup_UpdateServer::checkAuthorization($request)方法。這是使用此方法應做的事情:

  1. 通過使用檢索包含令牌的查詢參數$request->param('arg_name')
  2. 驗證令牌。同樣,這部分取決于您。您可以在數據庫中查找它,使用校驗和來驗證它,或進行其他操作。
  3. 如果令牌是好的,則無需執行任何特殊操作。
  4. 如果令牌無效,請調用$this->exitWithError('Error message')以輸出錯誤并停止腳本執行。

以下是腳本的簡化版本,用于為Admin Menu Editor Pro實施安全更新??。它比上面的概述要先進一些,但是總體思路是相同的。

(同樣,許可證管理超出了本文的范圍,因此,我省略了大多數與加載和驗證許可證有關的代碼。只需將verifyLicenseExists()和其他許可功能視為偽代碼。)

class SecureUpdateServer extends Wpup_UpdateServer {
    protected $licenseServer;
 
    public function __construct($serverUrl, $licenseServer) {
        parent::__construct($serverUrl);
        $this->licenseServer = $licenseServer;
    }
 
    protected function initRequest($query = null, $headers = null) {
        $request = parent::initRequest($query, $headers);
 
        //Load the license, if any.
        $license = null;
        if ( $request->param('license_key') ) {
            $result = $this->licenseServer->verifyLicenseExists(
                $request->slug,
                $request->param('license_key')
            );
            if ( is_wp_error($result) ) {
                //If the license doesn't exist, we'll output an invalid dummy license.
                $license = new Wslm_ProductLicense(array(
                    'status' => $result->get_error_code(),
                    'error' => array(
                        'code' => $result->get_error_code(),
                        'message' => $result->get_error_message(),
                    ),
                ));
            } else {
                $license = $result;
            }
        }
 
        $request->license = $license;
        return $request;
    }
 
    protected function filterMetadata($meta, $request) {
        $meta = parent::filterMetadata($meta, $request);
 
        //Include license information in the update metadata. This saves an HTTP request
        //or two since the plugin doesn't need to explicitly fetch license details.
        $license = $request->license;
        if ( $license !== null ) {
            $meta['license'] = $this->licenseServer->prepareLicenseForOutput($license);
        }
 
        //Only include the download URL if the license is valid.
        if ( $license && $license->isValid() ) {
            //Append the license key or to the download URL.
            $args = array( 'license_key' => $request->param('license_key') );
            $meta['download_url'] = self::addQueryArg($args, $meta['download_url']);
        } else {
            //No license = no download link.
            unset($meta['download_url']);
        }
 
        return $meta;
    }
 
    protected function checkAuthorization($request) {
        parent::checkAuthorization($request);
 
        //Prevent download if the user doesn't have a valid license.
        $license = $request->license;
        if ( $request->action === 'download' && ! ($license && $license->isValid()) ) {
            if ( !isset($license) ) {
                $message = 'You must provide a license key to download this plugin.';
            } else {
                $error = $license->get('error');
                $message = isset($error) ? $error : 'Sorry, your license is not valid.';
            }
            $this->exitWithError($message, 403);
        }
    }
}

來源于: https://w-shadow.com/blog/2013/03/19/plugin-updates-securing-download-links/

給TA贊賞
共{{data.count}}人
人已贊賞
??
Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
?
購物車
優惠劵
搜索
久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

    9000px;">

      国产一区二区免费在线| 欧美亚洲综合在线| 欧美午夜在线一二页| 亚洲欧美中日韩| 91免费版在线| 亚洲图片自拍偷拍| 久久精品免费在线观看| 日韩一区二区三区四区| 91免费小视频| 国内精品伊人久久久久影院对白| 欧美一级免费大片| 精品一区二区免费看| 国产一区二区三区精品欧美日韩一区二区三区 | 欧洲另类一二三四区| 不卡的电影网站| 高清不卡一区二区在线| av在线一区二区三区| 成人中文字幕电影| 91影院在线免费观看| 99这里只有久久精品视频| 成人精品视频一区| 欧美最新大片在线看| 欧洲亚洲精品在线| 欧美色综合久久| 欧美一级淫片007| 日韩视频一区二区| 国产欧美日韩在线视频| 国产精品久久久久久久蜜臀 | 亚洲欧美日韩电影| 亚洲精品视频在线观看网站| 亚洲福利视频三区| 久久69国产一区二区蜜臀| 国产一区欧美一区| 99久久99久久久精品齐齐| 欧美日韩久久久一区| 日韩欧美激情四射| 国产精品女主播在线观看| 亚洲综合免费观看高清完整版 | 成人午夜免费av| 欧洲国内综合视频| 精品国产91久久久久久久妲己 | 色综合久久久久| 777xxx欧美| 久久精品欧美一区二区三区不卡| 亚洲欧美日韩久久| 免费成人在线观看视频| 成人免费视频app| 91麻豆精品国产91久久久使用方法 | 亚洲午夜电影在线观看| 激情久久五月天| 91在线国产福利| 精品视频在线看| 国产精品免费久久| 热久久久久久久| 91福利精品视频| 国产欧美精品一区| 日本三级亚洲精品| 99re热这里只有精品免费视频| 欧美日韩视频在线第一区 | 久久午夜国产精品| 一区二区三区在线高清| 国产成人免费9x9x人网站视频| 欧美日韩免费在线视频| 亚洲视频在线一区观看| 黑人精品欧美一区二区蜜桃| 91国偷自产一区二区三区观看 | 亚洲乱码国产乱码精品精小说| 欧美综合一区二区| 欧美日韩在线免费视频| 欧美丰满美乳xxx高潮www| 91精品啪在线观看国产60岁| 91麻豆精品国产91久久久 | 欧美色涩在线第一页| 国产香蕉久久精品综合网| 蜜桃视频在线观看一区| 91成人网在线| 亚洲乱码国产乱码精品精小说| a在线播放不卡| 久久久精品黄色| 国产一区视频在线看| 精品国偷自产国产一区| 首页国产丝袜综合| 欧美理论在线播放| 亚洲3atv精品一区二区三区| 日本韩国一区二区| 亚洲线精品一区二区三区八戒| av一区二区三区黑人| 亚洲丝袜另类动漫二区| 色一情一伦一子一伦一区| 亚洲精品国产一区二区精华液| 色综合久久综合网欧美综合网| 1区2区3区精品视频| 欧美最猛黑人xxxxx猛交| 亚洲一区二区三区视频在线播放| 色屁屁一区二区| 亚洲制服丝袜av| 欧美男人的天堂一二区| 老鸭窝一区二区久久精品| 精品国产免费久久| 丰满白嫩尤物一区二区| 亚洲欧美乱综合| 欧美特级限制片免费在线观看| 日韩高清在线电影| 欧美不卡视频一区| 成人激情黄色小说| 亚洲一区二区三区四区的| 91精品国产91久久久久久一区二区 | 成人免费福利片| 一区2区3区在线看| 91精品国产综合久久香蕉的特点| 老司机精品视频一区二区三区| 精品少妇一区二区三区在线播放 | 亚洲午夜三级在线| 日韩一区二区麻豆国产| 日韩一区二区精品在线观看| 日本二三区不卡| 中文字幕中文字幕中文字幕亚洲无线 | 亚洲色图制服诱惑 | 亚洲成a人片综合在线| 日韩精品专区在线影院重磅| 国产成人亚洲综合色影视| 亚洲日本va在线观看| 日韩视频免费直播| www.色综合.com| 蓝色福利精品导航| 亚洲精品美国一| 精品国产自在久精品国产| 色综合天天综合网天天看片| 蜜桃视频在线观看一区二区| 亚洲免费观看高清完整版在线| 日韩一区二区视频| 色综合夜色一区| 成人国产亚洲欧美成人综合网| 图片区日韩欧美亚洲| 中文字幕一区二区三区av| 日韩欧美中文一区| 色噜噜偷拍精品综合在线| 激情综合色综合久久综合| 亚洲国产精品影院| 日韩一区欧美小说| 久久久久久夜精品精品免费| 3d成人动漫网站| 91网站在线播放| 国产精品综合在线视频| 日韩激情av在线| 亚洲精品一二三四区| 中文字幕一区二区三| 国产日韩亚洲欧美综合| 欧美mv日韩mv国产网站| 欧美日韩成人综合| 色激情天天射综合网| fc2成人免费人成在线观看播放| 国产一区视频网站| 国产乱码精品一品二品| 免费成人在线观看| 青椒成人免费视频| 午夜精品久久久久久久99水蜜桃| 亚洲欧洲av另类| 国产精品美女久久久久久| 26uuu亚洲综合色欧美| 精品国产sm最大网站免费看| 日韩免费成人网| 精品欧美一区二区久久| 日韩一级片在线播放| 日韩免费观看2025年上映的电影| 日韩一区二区在线免费观看| 欧美一区午夜视频在线观看| 欧美久久一二区| 欧美日本视频在线| 欧美va亚洲va| 久久久三级国产网站| 欧美高清在线视频| 国产精品美日韩| 成人欧美一区二区三区视频网页| 中文字幕中文字幕中文字幕亚洲无线 | 国产综合色视频| 国产精品久久综合| 在线综合+亚洲+欧美中文字幕| 国产**成人网毛片九色| 蜜臀av性久久久久蜜臀av麻豆| 国产精品乱人伦| 久久午夜电影网| 91精品国产综合久久久蜜臀图片| av激情综合网| 国产米奇在线777精品观看| 欧美肥大bbwbbw高潮| 色综合久久久久综合99| 欧美色成人综合| 久久亚洲精品国产精品紫薇| 国产精品区一区二区三| 亚洲激情图片一区| 捆绑紧缚一区二区三区视频| 东方欧美亚洲色图在线| 欧美午夜片在线看| xnxx国产精品| 一区二区三区高清| 韩日精品视频一区| 欧美亚洲一区三区| 久久夜色精品国产欧美乱极品| 亚洲日本乱码在线观看|