waitman/postcheck

使用CSRF检查POST请求

dev-master 2016-01-03 21:00 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:31:35 UTC


README

PostCheck / PHP

此程序提供了一个PHP类,用于验证POST请求。

PostCheck

  1. 通过HTTPS发出的请求

  2. 使用POST方法发出的请求

  3. 有效的Content-Type (application/x-www-form-urlencoded 或 multipart/form-data)

  4. HTTP连接类型必须是keep-alive(即,不是'close')

  5. 引用者必须与主机匹配

  6. 内容长度数据有效负载不得超过定义的限制(如果没有上传文件)

  7. CSRF令牌检查

简单示例

<?php

define('MAX_POST_SIZE',4*1024);                         /* 4k post limit, adjust as needed. */
define('MAX_CSRF_AGE',10*60);                           /* 10 minutes */
define('CSRF_BYTE_SIZE',32);                            /* number of random bytes to generate */
define('CSRF_SECRET_FILE','/secret/csrf-secret');       /* location of secret storage */
define('CSRF_SECRET_FILE_MAX_LIFE',24*60*60);           /* regenerate after 24 hours */
define('CSRF_TOKEN_FIELD_NAME','csrftoken');            /* field name used in form */

require_once('vendor/autoload.php'); //composer

use PostCheck\PostCheck;

$test = new PostCheck;
if (!$test->is_error())
{
	
	if (!$test->check()) 			/* check form post */
		echo $test->error(); 
	
	echo $test->secrettime();	/* when secret was generated */
	
	$test->nocache();               /* send http headers */

    $csrftoken = $test->gencsrf();  /* generate CSRF token */
}

注意:请参阅src/example.php

注意

CSRF令牌可以存储在$_SESSION中,但请注意CSRF_SECRET_FILE_MAX_LIFE和MAX_CSRF_AGE。

如果尚未调用,则调用start_session()。如果在您的程序中未先检查就调用start_session(),这可能会导致NOTICE消息。

如果您更改CSRF_BYTE_SIZE,请删除CSRF_SECRET_FILE文件。

许可协议

版权(c)2016 Waitman Gobble ns@waitman.net。保留所有权利。

以源代码和二进制形式重新分发和使用上述版权声明和本段,前提是所有此类形式都重复了上述版权声明和本段,并且任何与此类分发和使用相关的文档、广告材料和其他材料均承认该软件是由Waitman Gobble开发的。未经事先书面许可,Waitman Gobble的名称不得用于推广或认可由此软件派生出的产品。本软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于对适销性和特定用途的隐含保证。

使用composer安装

编辑项目目录中的composer.json

{
        "minimum-stability": "dev",
        "require": {
                "waitman/postcheck": "dev-master"
        }
}
# composer update