美文网首页
Web安全 之 时序攻击

Web安全 之 时序攻击

作者: 诺之林 | 来源:发表于2018-04-28 15:38 被阅读226次

问题引入

如何比较两个字符串?

这还不简单 使用"=="或"==="判断相等不就可以了

好吧 既然都这么问了 这个问题肯定是有"陷阱"的

那么 "陷阱"在哪里呢?

通常 字符串比较的实现基于移位匹配

int
strcmp(const char *s1, const char *s2)
{
    for ( ; *s1 == *s2; s1++, s2++)
    if (*s1 == '\0')
        return 0;
    return ((*(unsigned char *)s1 < *(unsigned char *)s2) ? -1 : +1);
}

上述源码引自Apple Open Source

此时 碰到任何不匹配 则直接退出返回比较结果

于是 代码循环的次数都不一样的 导致执行耗时也是不一样的

当然 由于现代计算机性能的提升 普通开发者很难体会到耗时的差异

上述 便是本文所要讨论的"时序攻击"

关于"时序攻击"的学术定义 可以参考Timing attack

时序攻击

如何防范"时序攻击"呢?

这里 我们可以回忆一下PHP开发 之 摘要和签名所讨论的哈希算法

哈希算法有如下两个特点

输出定长: 输入无论是普通密码还是大文件 输出长度都是固定的

相同输入的输出相同: 因此哈希算法可以通过输出的摘要校验输入数据的完整性

因此 我们可以

首先 使用哈希算法得到将要比较的字符串的哈希值

接着 比较两个哈希值的字符串

了解了上述原理 伪代码实现如下

bool
hash_equals(const char *s1, const char *s2)
{
    const char *h1 = hash(s1);
    const char *h2 = hash(s2);
    return strcmp(h1, h2) == 0 ? true : false;
}

常见编程语言都实现了原生的hash_equals方法 例如: PHP实现可以参考hash_equals

参考

相关文章

  • Web安全 之 时序攻击

    问题引入 如何比较两个字符串? 这还不简单 使用"=="或"==="判断相等不就可以了 好吧 既然都这么问了 这个...

  • xss攻击

    前端安全之XSS攻击 XSS(cross-site scripting跨域脚本攻击)攻击是最常见的Web攻击,其重...

  • Web 安全入门之常见攻击

    Web 安全入门之常见攻击 搞 Web 开发离不开安全这个话题,确保网站或者网页应用的安全性,是每个开发人员都应该...

  • web安全之XSS攻击

    1. 什么是XSS? CSRF(Cross-site request forgery),中文名称:跨站请求伪造。将...

  • Web安全 之 XSS攻击

    本文演示 Demo 的代码地址: XSS XSS简介 跨站脚本攻击,英文全称是 Cross Site Script...

  • Web安全 之 CSRF攻击

    本文演示 Demo 的代码地址: CSRF CSRF是什么? CSRF(Cross Site Request Fo...

  • Web安全之CSRF攻击

    王者 14310116049 转载自:http://www.elecfans.com/news/wangluo/2...

  • web安全之 -- XSS攻击

    什么是XSS攻击 XSS, 即为(Cross Site Scripting), 中文名为跨站脚本, 是发生在目标用...

  • web安全之 -- CSRF攻击

    CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称...

  • web安全之 -- SSRF攻击

    漏洞简介 SSRF (Server-side Request Forge, 服务端请求伪造)是一种由攻击者构造形成...

网友评论

      本文标题:Web安全 之 时序攻击

      本文链接:https://www.haomeiwen.com/subject/ektqlftx.html