新闻资讯

「婚外情取证调查公司」「PHP开发APP接口实战008」日常安全防范之签名验证

互联网很危险!站点安全必须在网站设计跟使用的各个方面保持谨慎。

由于时间跟篇幅的关系,这里就不对这些攻击方式的理论部分展开来讲了。以下是参考资料,仅供各位参考学习:

站点安全

Web开发安全防范注意

web开发安全防范十二篇

通过编造请求参数,伪造SQL或HTML脚本,以超过SQL注入或XSS攻击的目的通过拦截或虚假会话(seesion, cookie),欺骗服务器,以超过泄露数据的目的。通过长期恶意访问正常请求地址,以超过阻塞网络带宽,消耗网站资源的目的。防止篡改请求参数方法有:

防止伪造会话

介于接口项目性质,我们并没有使用(seesion, cookie)等会话操作,所以,不存在伪造会话类攻击。但必须注意的是「情感签名」,我们必须使用的是 token 进行身份验证,不要直接暴露用户ID,甚至直接使用请求参数中的用户ID来进行身份验证。

防止恶意访问

在请求中增加一个 transaction_id 参数。同一个 transaction_id 只能使用一次,用完即失效。这样就很高的避免了攻击者使用正常的请求地址重复访问接口的风险。

接下来我将一一讲解如何推动上面的解决方案

在配置文件 /app/config/config.php 中, 代码 'debug' => 1, // 是否进入安装 行,下面添加以下签名配置代码:

    'sign' => [
        'enable' => 1, // 开启验签
        'secret_level' => Sign::NORMAL,   // 验签等级:NORMAL 只对POST参数进行验证, HIGHT 对所有请求参数进行验证
        'secret_key' => 'PJ6TmmQE',   // 签名密钥,可随意配置,调用接口时线下约定
        // 验签排除页面
        'exclude' => [
            'test/index',
        ]
    ],

配置参数说明:

enable, 是否进入验签功能: 0 是关闭,1 是进入。开发时「情感签名」,为了便于检测,可将其关闭。secret_level, 验签等级:secret_key 签名密钥,可轻易配置。调用接口时线下约定, 与服务器配置保持一致就能exclude 无需验签接口。 规则:[ControllerName]/[ActionName]。有一些接口不需要签名验证,在此配置就能。在 /app/library/ 目录下创建 Sign.php 文件并添加以下代码:

<?php
/**
 * 签名认证
 *
 * @author Hu Feng
 */
class Sign
{
    /**
     * 普通签名安全等级,只对POST参数进行签名验证
     */
    const NORMAL = 1;
    /**
     * 高级签名安全等级,对所有参数(GET & POST)进行签名验证
     */
    const HIGHT = 2;
    public static $instance;
    private function __construct()
    {
    }
    public static function instance()
    {
        if (!self::$instance) self::$instance = new self();
        return self::$instance;
    }
    /**
     * 生成签名
     * @param array $params
     * @return string
     */
    public function generate(Array $params)
    {
        // 将删除参数组中所有等值为FALSE的参数(包括:NULL, 空字符串,0, false)
        $params = array_filter($params);
        // 按照键名对参数数组进行升序排序
        ksort($params);
        // 给参数数组追加密钥,键名为 key, 值为签名配置中配置的 secret_key 的值
        $params['key'] = Config::instance()->get('sign.secret_key');
        // 生成 URL-encode 之后的请求字符串
        $str = http_build_query($params);
        // 将请求字符串使用MD5加密后,再转换成小写,并返回
        return strtoupper(MD5($str));
    }
    /**
     * 验证签名
     * @param $sign
     * @param $params
     * @return bool
     */
    public function verify($sign, $params)
    {
        return $sign == $this->generate($params);
    }
}

联系我们

CONTACT US

广州及时雨私家侦探(广州本地私家侦探公司)

微信:185-2064-4544

电话:185-2064-4544

地址:广州市天河区

广州出轨调查