作者: C3P00

  • 【WordPress】function wp_validate_auth_cookie( $cookie = ”, $scheme = ” )

    function wp_validate_auth_cookie( $cookie = '', $scheme = '' ) {
    		$cookie_elements = wp_parse_auth_cookie( $cookie, $scheme );
    		if ( ! $cookie_elements ) {
    			/**
    			 * Fires if an authentication cookie is malformed.
    			 *
    			 * @since 2.7.0
    			 *
    			 * @param string $cookie Malformed auth cookie.
    			 * @param string $scheme Authentication scheme. Values include 'auth', 'secure_auth',
    			 *                       or 'logged_in'.
    			 */
    			do_action( 'auth_cookie_malformed', $cookie, $scheme );
    			return false;
    		}
    
    		$scheme     = $cookie_elements['scheme'];
    		$username   = $cookie_elements['username'];
    		$hmac       = $cookie_elements['hmac'];
    		$token      = $cookie_elements['token'];
    		$expired    = $cookie_elements['expiration'];
    		$expiration = $cookie_elements['expiration'];
    
    		// Allow a grace period for POST and Ajax requests.
    		if ( wp_doing_ajax() || 'POST' === $_SERVER['REQUEST_METHOD'] ) {
    			$expired += HOUR_IN_SECONDS;
    		}
    
    		// Quick check to see if an honest cookie has expired.
    		if ( $expired < time() ) {
    			/**
    			 * Fires once an authentication cookie has expired.
    			 *
    			 * @since 2.7.0
    			 *
    			 * @param string[] $cookie_elements {
    			 *     Authentication cookie components. None of the components should be assumed
    			 *     to be valid as they come directly from a client-provided cookie value.
    			 *
    			 *     @type string $username   User's username.
    			 *     @type string $expiration The time the cookie expires as a UNIX timestamp.
    			 *     @type string $token      User's session token used.
    			 *     @type string $hmac       The security hash for the cookie.
    			 *     @type string $scheme     The cookie scheme to use.
    			 * }
    			 */
    			do_action( 'auth_cookie_expired', $cookie_elements );
    			return false;
    		}
    
    		$user = get_user_by( 'login', $username );
    		if ( ! $user ) {
    			/**
    			 * Fires if a bad username is entered in the user authentication process.
    			 *
    			 * @since 2.7.0
    			 *
    			 * @param string[] $cookie_elements {
    			 *     Authentication cookie components. None of the components should be assumed
    			 *     to be valid as they come directly from a client-provided cookie value.
    			 *
    			 *     @type string $username   User's username.
    			 *     @type string $expiration The time the cookie expires as a UNIX timestamp.
    			 *     @type string $token      User's session token used.
    			 *     @type string $hmac       The security hash for the cookie.
    			 *     @type string $scheme     The cookie scheme to use.
    			 * }
    			 */
    			do_action( 'auth_cookie_bad_username', $cookie_elements );
    			return false;
    		}
    
    		$pass_frag = substr( $user->user_pass, 8, 4 );
    
    		$key = wp_hash( $username . '|' . $pass_frag . '|' . $expiration . '|' . $token, $scheme );
    
    		// If ext/hash is not present, compat.php's hash_hmac() does not support sha256.
    		$algo = function_exists( 'hash' ) ? 'sha256' : 'sha1';
    		$hash = hash_hmac( $algo, $username . '|' . $expiration . '|' . $token, $key );
    
    		if ( ! hash_equals( $hash, $hmac ) ) {
    			/**
    			 * Fires if a bad authentication cookie hash is encountered.
    			 *
    			 * @since 2.7.0
    			 *
    			 * @param string[] $cookie_elements {
    			 *     Authentication cookie components. None of the components should be assumed
    			 *     to be valid as they come directly from a client-provided cookie value.
    			 *
    			 *     @type string $username   User's username.
    			 *     @type string $expiration The time the cookie expires as a UNIX timestamp.
    			 *     @type string $token      User's session token used.
    			 *     @type string $hmac       The security hash for the cookie.
    			 *     @type string $scheme     The cookie scheme to use.
    			 * }
    			 */
    			do_action( 'auth_cookie_bad_hash', $cookie_elements );
    			return false;
    		}
    
    		$manager = WP_Session_Tokens::get_instance( $user->ID );
    		if ( ! $manager->verify( $token ) ) {
    			/**
    			 * Fires if a bad session token is encountered.
    			 *
    			 * @since 4.0.0
    			 *
    			 * @param string[] $cookie_elements {
    			 *     Authentication cookie components. None of the components should be assumed
    			 *     to be valid as they come directly from a client-provided cookie value.
    			 *
    			 *     @type string $username   User's username.
    			 *     @type string $expiration The time the cookie expires as a UNIX timestamp.
    			 *     @type string $token      User's session token used.
    			 *     @type string $hmac       The security hash for the cookie.
    			 *     @type string $scheme     The cookie scheme to use.
    			 * }
    			 */
    			do_action( 'auth_cookie_bad_session_token', $cookie_elements );
    			return false;
    		}
    
    		// Ajax/POST grace period set above.
    		if ( $expiration < time() ) {
    			$GLOBALS['login_grace_period'] = 1;
    		}
    
    		/**
    		 * Fires once an authentication cookie has been validated.
    		 *
    		 * @since 2.7.0
    		 *
    		 * @param string[] $cookie_elements {
    		 *     Authentication cookie components.
    		 *
    		 *     @type string $username   User's username.
    		 *     @type string $expiration The time the cookie expires as a UNIX timestamp.
    		 *     @type string $token      User's session token used.
    		 *     @type string $hmac       The security hash for the cookie.
    		 *     @type string $scheme     The cookie scheme to use.
    		 * }
    		 * @param WP_User  $user            User object.
    		 */
    		do_action( 'auth_cookie_valid', $cookie_elements, $user );
    
    		return $user->ID;
    	}

    这个PHP函数 wp_validate_auth_cookie() 是WordPress的身份验证系统的一部分。它用于验证用户登录时每个请求发送的身份验证cookie。该函数有两个可选参数:$cookie$scheme

    函数首先使用 wp_parse_auth_cookie() 函数解析身份验证cookie。如果cookie格式错误或不存在,函数会触发 auth_cookie_malformed 动作并返回 false

    接下来,它从解析的cookie中提取各种元素,包括方案、用户名、HMAC(用于数据完整性的一种加密哈希)、令牌和过期时间。

    然后,函数检查请求是否为AJAX或POST请求。如果是,它会将cookie的过期时间延长一小时。这是一个宽限期,用于允许长时间运行的操作。

    接着,函数检查cookie是否已过期。如果已过期,它会触发 auth_cookie_expired 动作并返回 false

    接下来,它检索与cookie中的用户名关联的用户。如果不存在这样的用户,它会触发 auth_cookie_bad_username 动作并返回 false

    然后,函数通过哈希cookie和用户密码的各种元素来生成一个密钥。它使用这个密钥来生成用户名、过期时间和令牌的哈希。如果生成的哈希与cookie中的HMAC不匹配,它会触发 auth_cookie_bad_hash 动作并返回 false

    接下来,它使用 WP_Session_Tokens::get_instance() 方法验证会话令牌。如果令牌无效,它会触发 auth_cookie_bad_session_token 动作并返回 false

    如果此时cookie的过期时间已过(只有在请求是AJAX或POST请求并且已应用宽限期的情况下才可能发生),它会将全局 login_grace_period 变量设置为 1

    最后,如果所有检查都通过,函数会触发 auth_cookie_valid 动作并返回用户的ID,表示身份验证cookie有效。

  • 短剧作为一个流量高速变现的生意,不是创作,而是商品

    Reblog via 抽屉新热榜

    【短剧编剧,被流量操控】刘笑天将短剧作为一个流量高速变现的生意,不是创作,而是商品,“这个商品和衣服袜子没有什么区别。”他将自己视为一个产品经理而不是文学创作者,“说白了我们就是服务业,肯定要找准用户痛点,把客户服务好……用户需要什么,我们生产什么。”
    dig.chouti.com/link/42290228

  • 生物实验室搬迁:安全重于泰山,慎之又慎

    近期,“睡在实验室门口的病毒学家”张永振事件引发了公众对生物实验室搬迁的关注。事件背后,折射出的是生物实验室搬迁的复杂性和潜在风险,以及对安全的高度重视。

    搬迁的风险:潜在的生物安全隐患

    生物实验室,尤其是高等级实验室,储存着各种病原体,稍有不慎,就可能造成泄露,引发公共卫生安全问题。搬迁过程中,涉及到样本的运输、设备的消毒、环境的处理等多个环节,任何一个环节出现疏漏,都可能导致严重后果。

    案例分析:张永振事件

    张永振教授的实验室为P2级别,虽然并非最高级别,但仍然存在潜在风险。实验室中储存着“在研项目包括新冠病毒等多个生物安全项目和一批病原未知样本”,这些样本的处理需要格外谨慎。

    专家的观点:慎重处理,安全第一

    特约专家庄时利和认为,无论出于什么理由关闭张永振教授的实验室,涉及到生物实验室改造、搬迁和关闭的事情,还是要非常慎重。他指出,搬迁过程对正在进行的实验会产生很大影响,一些病毒学实验需要在特定的实验室进行,一旦没有处理好,出现实验室泄漏,后果不堪设想。

    生物安全实验室的分级

    • P1实验室: 基础实验室,研究对公众健康危害风险较低的病原体。
    • P2实验室: 基础实验室,研究对人类或动物造成疾病,但不构成严重危害的病原体。
    • P3实验室: 生物防护实验室,研究对个人健康有高度风险的病原体。
    • P4实验室: 专用于烈性传染病研究与利用的大型装置,研究对人体具有高度危险性、尚无预防和治疗方法的病毒。

    搬迁的规范流程

    • 高等级实验室: 由于其特殊性,极少搬迁,更多是“携菌携毒入住”。
    • 个别搬迁: 需要对原有实验室所有污染物进行处理,设备进行消毒,解除感染风险。
    • 样本运输: 必须符合《病原微生物实验室生物安全管理条例》的规定。

    结语:安全重于泰山

    生物实验室搬迁是一项复杂而严谨的工作,需要充分考虑安全因素,严格按照规范流程操作,确保万无一失。任何侥幸心理和疏忽大意都可能导致严重后果。

    我们应该:

    • 提高对生物安全的认识: 认识到生物实验室搬迁的潜在风险,并予以高度重视。
    • 加强监管: 完善相关法律法规,加强对生物实验室搬迁的监管力度。
    • 提升技术水平: 研发更安全、更可靠的样本运输和实验室消毒技术。

    只有这样,才能确保生物实验室搬迁的安全,保障公众健康和社会安全。

  • Reblog of 抽屉新热榜:

    Reblog via 抽屉新热榜

    病毒学家张永振事件的背后:生物实验室为何不能随便搬迁?
    dig.chouti.com/link/42288370

  • 【WordPress】wp-load.php

    <?php
    /**
     * Bootstrap file for setting the ABSPATH constant
     * and loading the wp-config.php file. The wp-config.php
     * file will then load the wp-settings.php file, which
     * will then set up the WordPress environment.
     *
     * If the wp-config.php file is not found then an error
     * will be displayed asking the visitor to set up the
     * wp-config.php file.
     *
     * Will also search for wp-config.php in WordPress' parent
     * directory to allow the WordPress directory to remain
     * untouched.
     *
     * @package WordPress
     */
    
    /** Define ABSPATH as this file's directory */
    if ( ! defined( 'ABSPATH' ) ) {
    	define( 'ABSPATH', __DIR__ . '/' );
    }
    
    /*
     * The error_reporting() function can be disabled in php.ini. On systems where that is the case,
     * it's best to add a dummy function to the wp-config.php file, but as this call to the function
     * is run prior to wp-config.php loading, it is wrapped in a function_exists() check.
     */
    if ( function_exists( 'error_reporting' ) ) {
    	/*
    	 * Initialize error reporting to a known set of levels.
    	 *
    	 * This will be adapted in wp_debug_mode() located in wp-includes/load.php based on WP_DEBUG.
    	 * @see https://www.php.net/manual/en/errorfunc.constants.php List of known error levels.
    	 */
    	error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
    }
    
    /*
     * If wp-config.php exists in the WordPress root, or if it exists in the root and wp-settings.php
     * doesn't, load wp-config.php. The secondary check for wp-settings.php has the added benefit
     * of avoiding cases where the current directory is a nested installation, e.g. / is WordPress(a)
     * and /blog/ is WordPress(b).
     *
     * If neither set of conditions is true, initiate loading the setup process.
     */
    if ( file_exists( ABSPATH . 'wp-config.php' ) ) {
    
    	/** The config file resides in ABSPATH */
    	require_once ABSPATH . 'wp-config.php';
    
    } elseif ( @file_exists( dirname( ABSPATH ) . '/wp-config.php' ) && ! @file_exists( dirname( ABSPATH ) . '/wp-settings.php' ) ) {
    
    	/** The config file resides one level above ABSPATH but is not part of another installation */
    	require_once dirname( ABSPATH ) . '/wp-config.php';
    
    } else {
    
    	// A config file doesn't exist.
    
    	define( 'WPINC', 'wp-includes' );
    	require_once ABSPATH . WPINC . '/version.php';
    	require_once ABSPATH . WPINC . '/compat.php';
    	require_once ABSPATH . WPINC . '/load.php';
    
    	// Check for the required PHP version and for the MySQL extension or a database drop-in.
    	wp_check_php_mysql_versions();
    
    	// Standardize $_SERVER variables across setups.
    	wp_fix_server_vars();
    
    	define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
    	require_once ABSPATH . WPINC . '/functions.php';
    
    	$path = wp_guess_url() . '/wp-admin/setup-config.php';
    
    	// Redirect to setup-config.php.
    	if ( ! str_contains( $_SERVER['REQUEST_URI'], 'setup-config' ) ) {
    		header( 'Location: ' . $path );
    		exit;
    	}
    
    	wp_load_translations_early();
    
    	// Die with an error message.
    	$die = '<p>' . sprintf(
    		/* translators: %s: wp-config.php */
    		__( "There doesn't seem to be a %s file. It is needed before the installation can continue." ),
    		'<code>wp-config.php</code>'
    	) . '</p>';
    	$die .= '<p>' . sprintf(
    		/* translators: 1: Documentation URL, 2: wp-config.php */
    		__( 'Need more help? <a href="%1$s">Read the support article on %2$s</a>.' ),
    		__( 'https://wordpress.org/documentation/article/editing-wp-config-php/' ),
    		'<code>wp-config.php</code>'
    	) . '</p>';
    	$die .= '<p>' . sprintf(
    		/* translators: %s: wp-config.php */
    		__( "You can create a %s file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file." ),
    		'<code>wp-config.php</code>'
    	) . '</p>';
    	$die .= '<p><a href="' . $path . '" class="button button-large">' . __( 'Create a Configuration File' ) . '</a></p>';
    
    	wp_die( $die, __( 'WordPress &rsaquo; Error' ) );
    }
    

    这段PHP脚本是WordPress应用的一部分,它的主要目的是加载一些必要的文件,并进行一些基本的环境检查。

    首先,它加载了一些核心的WordPress文件,包括版本信息(version.php)、兼容性函数(compat.php)和加载函数(load.php)。

    然后,它调用wp_check_php_mysql_versions()函数来检查当前环境的PHP版本以及是否安装了MySQL扩展或者数据库插件。

    接着,它调用wp_fix_server_vars()函数来标准化$_SERVER变量,以确保在不同的环境下这些变量的行为是一致的。

    然后,它定义了WP_CONTENT_DIR常量,这个常量指向WordPress的内容目录,然后加载了一些基本的WordPress函数(functions.php)。

    接下来,它构造了一个指向setup-config.php的URL,并检查当前的请求URL是否包含setup-config,如果不包含,那么就会重定向到setup-config.php

    然后,它调用wp_load_translations_early()函数来加载早期的翻译。

    最后,如果wp-config.php文件不存在,它会显示一个错误信息,告诉用户需要wp-config.php文件才能继续安装,并提供了一个链接到编辑wp-config.php文件的支持文章,以及一个创建配置文件的按钮。如果用户点击这个按钮,就会被重定向到setup-config.php

    如果所有的检查都通过,那么WordPress的安装过程就可以开始了。

  • 从“捞女指南”到阶下囚:网红大V诈骗案揭露的网络陷阱

    近年来,随着网络的普及,网红经济蓬勃发展,一些网红凭借光鲜亮丽的外表和精心打造的人设,吸引了众多粉丝,并通过流量变现获得巨额财富。然而,在光鲜的背后,也隐藏着许多不为人知的阴暗面。最近,一位情感大V容某因诈骗罪被判刑十年半,引发了社会广泛关注,也让我们不得不反思网红经济背后的乱象和网络陷阱。

    “捞女指南”的华丽包装

    容某以“普女修炼指南”的身份活跃在微博平台,分享“捞女”经验,教导女性如何通过各种手段获取男性的金钱和资源。她以犀利的语言和对女性心理的精准把握,吸引了大量粉丝,尤其是那些在职场和情场失意的年轻女性。容某的出现,仿佛给这些女性提供了一条脱离困境的捷径,让她们看到了改变命运的希望。

    算命大师的精准“收割”

    然而,容某的真实目的并非帮助女性,而是利用她们的信任进行诈骗。她一人分饰两角,扮演“命理分析大师”,通过算命、占星等手段,夸大粉丝的负面信息,制造焦虑情绪,并诱导她们付费进行“法事”、“点蜡烛”等服务。由于容某掌握了粉丝的个人信息,她能够进行精准的“心理营销”,让粉丝深信不疑,最终心甘情愿地掏钱。

    虚假人设的最终崩塌

    为了提升自己的影响力,容某甚至自称是好利来二公子罗成的未婚妻,并通过各种手段制造与罗成恋爱的假象。然而,谎言终究是谎言,最终被罗成本人亲自揭穿。随着诈骗行为的败露,容某精心打造的“捞女”和“算命大师”的虚假人设也随之崩塌,最终锒铛入狱。

    网络陷阱的警示

    这起案件揭示了网红经济背后的阴暗面,也给我们敲响了警钟:

    • 警惕虚假人设: 网红往往通过精心打造的人设来吸引粉丝,但这些光鲜亮丽的形象背后可能隐藏着不为人知的真相。
    • 理性看待网络信息: 网络上充斥着各种信息,我们要学会辨别真伪,避免被虚假信息误导。
    • 增强防范意识: 不要轻信网络上的陌生人,尤其是涉及金钱交易时,更要提高警惕,避免落入网络陷阱。

    构建健康网络生态

    这起案件也引发了对平台监管和网络生态的思考。社交平台需要加强监管,打击网络诈骗行为,保护用户的合法权益。同时,我们每个人也要提高网络安全意识,共同维护健康的网络生态。

    结语

    网络时代,信息传播的速度和广度都远超以往,这也给了一些不法分子可乘之机。我们要保持清醒的头脑,理性看待网络信息,增强防范意识,避免落入网络陷阱。同时,也希望相关部门加强监管,打击网络犯罪,共同营造一个安全、健康的网络环境。

  • Reblog of 抽屉新热榜:

    Reblog via 抽屉新热榜

    几十万人关注的女网红,缝纫机要踩冒烟了
    dig.chouti.com/link/42288942

  • Reblog of 抽屉新热榜:

    Reblog via 抽屉新热榜

    比特币巨震,超14万人爆仓,创下近两年最糟糕单月表现
    dig.chouti.com/link/42289839

  • 【WordPress】wp-blog-header.php

    <?php
    /**
     * Loads the WordPress environment and template.
     *
     * @package WordPress
     */
    
    if ( ! isset( $wp_did_header ) ) {
    
    	$wp_did_header = true;
    
    	// Load the WordPress library.
    	require_once __DIR__ . '/wp-load.php';
    
    	// Set up the WordPress query.
    	wp();
    
    	// Load the theme template.
    	require_once ABSPATH . WPINC . '/template-loader.php';
    
    }
    
    

    这段 PHP 代码是 WordPress 应用的一部分,特别是 wp-blog-header.php 文件。这个文件负责加载 WordPress 环境和当前主题的模板。

    代码开始于一个条件语句,检查 $wp_did_header 变量是否已设置。这个变量作为一个标志,确保 WordPress 环境和模板只加载一次。如果 $wp_did_header 未设置,条件块内的代码将会运行。

    在条件块内,$wp_did_header 被设置为 true。这防止了如果在执行过程中再次需要 wp-blog-header.php,代码块会再次运行。

    接下来,require_once 语句包含了 wp-load.php 文件。这个文件是 WordPress 库的加载器。它设置了 WordPress 环境,包括加载配置文件、设置错误处理和加载活动插件。

    然后调用了 wp() 函数。这个函数负责设置 WordPress 查询,根据请求的 URL 确定要显示的内容。例如,如果 URL 对应一个特定的博客文章,查询将从数据库中检索该文章的内容。

    最后,require_once 语句包含了 template-loader.php 文件。这个文件确定应该使用活动主题的哪个模板文件来显示页面。例如,如果查询是针对单个博客文章,它将加载 single.php 模板。如果查询是针对页面,它将加载 page.php 模板。

    这段代码加载了 WordPress 环境,根据请求的 URL 设置了内容查询,并从活动主题中加载了适当的模板文件。