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

插件更新:保護下載鏈接

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

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

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

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

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

選擇一個安全令牌

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

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

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

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

將令牌添加到更新請求

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

這是一個例子:

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

使用令牌授權下載

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

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

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

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

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

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

    9000px;">

      国内av一区二区| 不用播放器的免费av| 在线观看亚洲欧美| 怡红院一区二区三区| 在线一区二区不卡| 色香蕉在线视频| 五月天视频在线观看| 一区二区三区视频网| 中文字幕在线播出| 91免费在线看片| 国产福利视频网站| 九九热最新视频| 日本在线视频中文字幕| 亚欧美一区二区三区| 亚洲精品成av人片天堂无码| avtt中文字幕| 黄色一级视频免费观看| 日本午夜精品视频| 一区二区精品视频在线观看| 天堂av在线网站| 亚洲精品女人久久久| 粉嫩av蜜桃av蜜臀av| 久国产精品视频| 四季av一区二区| 99精品一区二区三区无码吞精| 国产精品手机在线观看| 久久免费视频精品| 亚洲 自拍 另类 欧美 丝袜| 97人妻一区二区精品视频| 黄色在线观看国产| 天天操天天干天天干| 99精品在线视频观看| 妺妺窝人体色www聚色窝仙踪| 亚洲第一成人网站| 国产区在线观看视频| 色哟哟精品视频| 国产精品99久久久久久成人| 日本天堂在线播放| a天堂视频在线| 日韩av男人天堂| 9i看片成人免费看片| 日本a在线观看| www.毛片.com| 日韩免费一二三区| 北条麻妃一二三区| 五月色婷婷综合| 国产午夜视频在线| 亚洲国产中文字幕在线| 久久综合久久鬼| 亚洲色图 激情小说| 欧美日韩一区二区区| 亚洲高清视频免费| 精品无码人妻一区二区三区| 亚洲无码久久久久| 天天色综合社区| 久久一级免费视频| 99re只有精品| 中文字幕欧美人妻精品一区蜜臀| 国内精品久久99人妻无码| 17c国产在线| 熟妇人妻久久中文字幕| 黄色片网站在线免费观看| 一级黄色片免费| 婷婷在线免费观看| 久久久精品91| 国产情侣在线播放| 爱情岛论坛成人| 中文字幕在线日亚洲9| 日韩一区二区a片免费观看| 久热这里只有精品在线| 国产一区二区99| 97人人爽人人爽人人爽| 中文字幕一区二区在线观看视频| 日本精品人妻无码77777| 久久发布国产伦子伦精品| 一级特黄aa大片| 中国美女黄色一级片| 中文字幕在线播放av| 神马久久久久久久久久| 日韩av片专区| 久久精品黄色片| 伊人久久国产精品| 天天操天天干天天做| 亚洲 欧美 变态 另类 综合| 性无码专区无码| 中文字幕欧美视频| 亚洲视屏在线观看| www.中文字幕av| 国产美女喷水视频| 精品人妻一区二区三区蜜桃视频| 牛夜精品久久久久久久| 日韩精品视频免费看| 日本少妇做爰全过程毛片| 天堂8在线视频| 香蕉视频免费网站| 亚洲熟妇无码乱子av电影| jlzzjlzz亚洲女人18| 国精品无码人妻一区二区三区| 精品久久国产视频| 色婷婷激情视频| 在线观看免费av网址| 97在线观看免费视频| 国产一区二区在线观看免费视频| 免费国产羞羞网站视频| 西西444www无码大胆| 999精品久久久| 久操免费在线视频| 亚洲av成人无码网天堂| a片在线免费观看| 欧美激情视频二区| 亚洲精品乱码久久久久久动漫| 国产av一区二区三区精品| 浓精h攵女乱爱av| 中文字幕一区二区在线观看视频 | 国产一区二区三区精品在线| 欧美亚洲日本在线| 亚洲一区二区人妻| 久久久久香蕉视频| 亚洲黄色a v| 久久艹精品视频| 中文字幕第一页在线播放| 国产黄色av片| 天天操夜夜操av| 国产精品99久久久久久成人| 人妻中文字幕一区二区三区| 91精品国产高清一区二区三密臀 | 中文字幕在线欧美| 久久久精品成人| 一个人看的视频www| 青青草激情视频| а√中文在线资源库| 午夜在线观看av| 久草手机在线观看| 91国在线视频| 午夜福利一区二区三区| 国产情侣久久久久aⅴ免费| 亚洲高清视频免费观看| 免费在线黄色网| 国产chinesehd精品露脸| 午夜免费福利在线| 男人天堂av在线播放| 国产极品久久久| 亚洲网中文字幕| 四季av一区二区| 久久久久久久国产精品毛片| 97免费在线观看视频| 在线观看国产黄| 日本美女久久久| 久久久久久久久毛片| 国产高潮免费视频| 91精品人妻一区二区三区| 亚洲av无码一区东京热久久| 欧美日韩人妻精品一区在线| 国产一级免费av| 干b视频在线观看| 一级特黄a大片免费| 亚洲成人一二三区| 色国产在线视频| 青春草免费视频| 久久久久久久高清| 国产人妻精品一区二区三区| www日本在线| av在线无限看| 亚洲综合免费视频| 亚洲人与黑人屁股眼交| 依人在线免费视频| 五月婷中文字幕| 午夜精品久久久久99蜜桃最新版| 日韩精品无码一区二区| 人妻少妇精品无码专区久久| 欧美天堂在线视频| 欧美国产日韩在线观看成人| 刘亦菲久久免费一区二区| 美女被艹视频网站| 欧美成人精品一区二区综合免费 | 99自拍视频在线| 99热这里只有精品4| www.日韩在线观看| 国产手机av在线| 老熟妇精品一区二区三区| 日本精品久久久久中文| 熟妇高潮一区二区三区| 中文字幕第三区| 亚洲日本精品视频| 插吧插吧综合网| 精品国产午夜福利在线观看| 免费在线不卡av| 四虎成人永久免费视频| 亚洲精品成人在线播放| 丰满少妇被猛烈进入一区二区| 国产伦精品一区二区三区视频我| 国产又粗又猛又黄视频| 人妻精品久久久久中文| 亚洲av成人精品一区二区三区在线播放 | 无码精品视频一区二区三区| 中文字幕免费高清在线观看| aaaaaav| 久久综合在线观看| 日本中文在线视频| 精品国产大片大片大片|