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

插件更新:保護(hù)下載鏈接

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

自發(fā)布插件更新檢查器庫(kù)以來(lái),提出的最常見問(wèn)題之一是:“如何保護(hù)我的下載鏈接,以便只有購(gòu)買了我的插件的用戶才能下載更新?”

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

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

  1. 給每個(gè)用戶某種安全令牌。這可以是會(huì)員站點(diǎn)的登錄名+密碼,許可證密鑰,或者更深?yuàn)W的東西。
  2. 每當(dāng)有人在其站點(diǎn)上安裝您的插件時(shí),都要求他們輸入密鑰/登錄/以其他方式輸入。
  3. 修改插件以將令牌附加到每個(gè)更新請(qǐng)求。
  4. 編寫一個(gè)服務(wù)器腳本,該腳本在允許下載之前驗(yàn)證令牌。

選擇一個(gè)安全令牌

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

就個(gè)人而言,我更喜歡使用許可證密鑰。每當(dāng)有人購(gòu)買我的Admin Menu Editor Pro插件時(shí),訂單處理腳本都會(huì)生成一個(gè)隨機(jī)密鑰,將其存儲(chǔ)在數(shù)據(jù)庫(kù)中,然后將密鑰和下載鏈接發(fā)送到客戶的電子郵件中。然后,當(dāng)他們安裝插件時(shí),將提供一個(gè)輸入許可證密鑰的鏈接。

我不會(huì)在此處包括許可證管理代碼,因?yàn)樗辉诒疚牡挠懻摲秶鷥?nèi),而是為該特定插件構(gòu)建的,但是用戶界面看起來(lái)像這樣(單擊放大):

插件更新:保護(hù)下載鏈接
插件更新:保護(hù)下載鏈接

將令牌添加到更新請(qǐng)求

現(xiàn)在,我們?nèi)绾螌踩钆铺砑拥矫總€(gè)更新請(qǐng)求中?您可以使用addQueryArgFilter($callback)更新檢查器的方法來(lái)執(zhí)行此操作。回調(diào)函數(shù)將接收查詢參數(shù)的關(guān)聯(lián)數(shù)組。只需將令牌添加到列表中并返回修改后的數(shù)組即可。

這是一個(gè)例子:

/* ... 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;
}

使用令牌授權(quán)下載

最后,讓更新服務(wù)器在允許用戶下載更新之前驗(yàn)證安全令牌。為此,您需要?jiǎng)?chuàng)建一個(gè)自定義服務(wù)器類(請(qǐng)參閱擴(kuò)展服務(wù)器)并至少重寫該

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

  1. 通過(guò)使用檢索包含令牌的查詢參數(shù)$request->param('arg_name')
  2. 驗(yàn)證令牌。同樣,這部分取決于您。您可以在數(shù)據(jù)庫(kù)中查找它,使用校驗(yàn)和來(lái)驗(yàn)證它,或進(jìn)行其他操作。
  3. 如果令牌是好的,則無(wú)需執(zhí)行任何特殊操作。
  4. 如果令牌無(wú)效,請(qǐng)調(diào)用$this->exitWithError('Error message')以輸出錯(cuò)誤并停止腳本執(zhí)行。

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

(同樣,許可證管理超出了本文的范圍,因此,我省略了大多數(shù)與加載和驗(yàn)證許可證有關(guān)的代碼。只需將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);
        }
    }
}

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

??
Npcink上的部份代碼及教程來(lái)源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
無(wú)意侵害您的權(quán)益,請(qǐng)發(fā)送郵件至 1355471563#qq.com 或點(diǎn)擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
?
購(gòu)物車
優(yōu)惠劵
搜索
久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

    9000px;">

      97se亚洲国产综合在线| 欧美色图片你懂的| 欧美性色欧美a在线播放| 国产精品精品国产色婷婷| 丁香网亚洲国际| 亚洲欧洲无码一区二区三区| 99re热视频这里只精品| 亚洲男同性恋视频| 91九色02白丝porn| 婷婷久久综合九色国产成人 | 91久久精品一区二区三| 亚洲第一久久影院| 久久女同精品一区二区| 97久久久精品综合88久久| 一区二区三区在线看| 欧美精品一二三四| 成人高清伦理免费影院在线观看| 亚洲精品视频自拍| 欧美一区二区三区播放老司机| 国产精品一区二区三区四区 | 亚洲chinese男男1069| 91精品国产入口| 国产激情一区二区三区四区| 一区二区三区四区亚洲| 欧美精品一区男女天堂| 在线视频欧美区| 国产高清在线精品| 日韩不卡一二三区| 亚洲欧美激情在线| 久久午夜国产精品| 欧美日韩免费一区二区三区 | 91污在线观看| 成人精品视频一区| 日韩国产一二三区| 亚洲免费观看在线视频| 国产亚洲欧洲一区高清在线观看| 欧美最猛性xxxxx直播| 成人免费黄色在线| 国内精品免费在线观看| 青草av.久久免费一区| 一区二区三区欧美视频| 欧美激情一区二区三区全黄 | 亚洲国产欧美在线| 亚洲欧美综合另类在线卡通| 久久综合999| 日韩欧美卡一卡二| 3atv在线一区二区三区| 色综合久久久久综合| 粉嫩av亚洲一区二区图片| 青青草91视频| 三级不卡在线观看| 亚洲成a人片在线不卡一二三区| 国产精品传媒视频| 国产精品久99| 亚洲欧美日韩国产综合在线| 亚洲私人影院在线观看| 亚洲三级在线播放| 亚洲欧美另类在线| 亚洲午夜激情网站| 日本v片在线高清不卡在线观看| 日本最新不卡在线| 亚洲成人综合视频| 无吗不卡中文字幕| 天天综合天天做天天综合| 日本一不卡视频| 黄色资源网久久资源365| 国产精品1024| www.亚洲精品| 色天天综合色天天久久| 欧美日本一区二区三区四区| 欧美一区中文字幕| 精品久久国产老人久久综合| 久久精品人人做人人综合| 136国产福利精品导航| 亚洲激情综合网| 日韩国产精品久久久久久亚洲| 久久国产乱子精品免费女| 极品尤物av久久免费看| 成人教育av在线| 91国内精品野花午夜精品| 色老综合老女人久久久| 精品区一区二区| 国产精品少妇自拍| 亚洲一区在线电影| 国产一区美女在线| 色狠狠av一区二区三区| 日韩欧美国产三级| 亚洲欧美激情一区二区| 看片的网站亚洲| 99久久精品情趣| 欧美一激情一区二区三区| 欧美午夜理伦三级在线观看| 欧美日韩一级片在线观看| 久久久99精品久久| 亚洲综合一区二区精品导航| 韩国毛片一区二区三区| 在线视频一区二区三| 久久只精品国产| 无吗不卡中文字幕| a在线欧美一区| 精品久久国产老人久久综合| 亚洲成人av一区二区| av亚洲精华国产精华精| 欧美一区午夜视频在线观看| 亚洲女人****多毛耸耸8| 激情另类小说区图片区视频区| 欧美亚洲丝袜传媒另类| 国产肉丝袜一区二区| 久久精品国产亚洲一区二区三区| 在线观看三级视频欧美| 中文字幕一区二区不卡| 国产精品香蕉一区二区三区| 欧美一区二区国产| 亚洲一卡二卡三卡四卡| eeuss国产一区二区三区| 国产视频在线观看一区二区三区| 蜜臀va亚洲va欧美va天堂| 在线精品视频免费播放| 中文字幕在线不卡一区| 国产成人免费av在线| 精品国产乱码久久久久久1区2区| 日日欢夜夜爽一区| 欧美日韩精品一二三区| 亚洲午夜一区二区三区| 欧美午夜精品电影| 亚洲国产日韩a在线播放性色| 欧美主播一区二区三区美女| 亚洲精品中文字幕乱码三区| 成人av网址在线| 国产精品灌醉下药二区| 成人午夜av在线| 亚洲精品欧美激情| 在线观看一区日韩| 亚洲国产一区在线观看| 欧美日韩亚洲国产综合| 裸体健美xxxx欧美裸体表演| 欧美一二三区在线| 久久爱另类一区二区小说| 日韩欧美一级二级三级| 久久精品国产色蜜蜜麻豆| 欧美tk丨vk视频| 国产成人a级片| 亚洲男人的天堂av| 欧美老肥妇做.爰bbww| 精品在线免费视频| 国产精品久久久久久久久动漫| 99精品热视频| 日韩中文字幕麻豆| 2021国产精品久久精品| 成人性生交大片免费看中文| 亚洲乱码精品一二三四区日韩在线| 欧美日韩精品是欧美日韩精品| 国内欧美视频一区二区| 中文字幕亚洲一区二区va在线| 欧美伊人精品成人久久综合97| 蜜桃久久久久久| 国产精品对白交换视频| 6080国产精品一区二区| 日韩二区三区四区| 丁香婷婷综合色啪| 亚洲免费观看在线视频| 亚洲va国产天堂va久久en| 国产肉丝袜一区二区| 国产精品影音先锋| 亚洲天天做日日做天天谢日日欢| 欧美天堂一区二区三区| 久久99精品国产麻豆不卡| 中文字幕一区二区三中文字幕| 宅男噜噜噜66一区二区66| 国产另类ts人妖一区二区| 亚洲最大成人网4388xx| 精品国产一区二区精华| 色婷婷av一区二区三区软件| 美女网站色91| 亚洲综合一二三区| 亚洲国产成人一区二区三区| 欧美日韩一级大片网址| 99国产精品久久| 激情久久久久久久久久久久久久久久| 亚洲精品国产高清久久伦理二区| 日韩免费视频线观看| 在线免费观看成人短视频| 国产99一区视频免费| 美女网站色91| 亚洲va中文字幕| 中文字幕一区三区| 国产三级精品三级在线专区| 日韩精品影音先锋| 91麻豆精品国产自产在线| 欧美羞羞免费网站| 97精品视频在线观看自产线路二| 国产一区二区三区美女| 日韩激情一二三区| 亚洲午夜免费电影| 亚洲猫色日本管| 亚洲人成影院在线观看| 国产精品第一页第二页第三页| 国产色婷婷亚洲99精品小说| 久久综合精品国产一区二区三区| 日韩欧美电影一区|