当前位置: 首页 > news >正文

北京网站建设的公司网络推广公司案例

北京网站建设的公司,网络推广公司案例,网站空间有什么用,如何开发网站PHP比较漏洞 一, 字符串与数字比较,0e’字符串比较 在 PHP 中处理字符串和数字比较时需要小心谨慎的重要性#xff0c;尤其是在安全敏感的应用中。 在某些情况下#xff0c;PHP 的类型强制转换可能会导致意外和潜在的安全漏洞。 var_dump(admin 0); //true …PHP比较漏洞 一, 字符串与数字比较,0e’字符串比较 在 PHP 中处理字符串和数字比较时需要小心谨慎的重要性尤其是在安全敏感的应用中。 在某些情况下PHP 的类型强制转换可能会导致意外和潜在的安全漏洞。 var_dump(admin 0); //true var_dump(1admin 1); //true var_dump(admin1 1); //false var_dump(admin1 0); //true var_dump(0e123456 0e4456789); //true 这段代码展示了 PHP 中的一些有趣且可能导致安全隐患的类型强制转换行为。让我们逐一分析每个表达式 var_dump(admin 0); 在 PHP 中当一个字符串与数字进行比较时如果字符串不是以数字开始则该字符串会被转换为数字 0。因此“admin” 被转换为 0所以 0 0 是 true。 var_dump(1admin 1); 在这个例子中字符串 “1admin” 在尝试转换为数字时会被解析为数字 1因为它以 1 开始忽略后续非数字字符。因此1 1 是 true。 var_dump(admin1 1); 这里 “admin1” 作为字符串不能转换为数字 1因为它不是以数字开始的。它将被转换为 0。所以0 1 是 false。 var_dump(admin1 0); 同上“admin1” 转换为数字时变成了 0所以 0 0 是 true。 var_dump(0e123456 0e4456789); 这是 PHP 类型强制转换中最有趣的一个例子。当一个字符串看起来像是科学记数法时例如 “0e123456”在与另一个类似结构的字符串比较时它们都会被转换为数字 0。 这是因为 e 后面的数字被解释为指数但由于前面的数字是 0所以整个表达式的值为 0。 因此两个看似不同的字符串在这种情况下会被认为是相等的。 二, Hash字符串比较 原理还是科学计数法字符串比较的问题. 测试1: var_dump(0e123456789012345678901234567890 0); //false var_dump(0e123456789012345678901234567890 0); //true因为 e 后面的数字被解释为指数但由于前面的数字是 0所以整个表达式的值为 0。 测试2: $pass $_GET[password]; $password 0e342768416822451524974117254469;if (md5($pass) $password) {echo flag{xx-xx-xxxx-xxx}; } else {echo error; }对于上面的代码那么只要是提交的密码的md5值是以0e开头的都会绕过, 比如. ?pwds1885207154a除了使用进行判断外从 PHP 5.6 开始hash_equals() 函数被引入主要用于安全地比较两个字符串的哈希值通常用于密码或敏感数据的验证。 hash_equals() 函数的关键特点 1. 时间恒定的比较 这意味着函数在比较两个字符串时所花费的时间不依赖于字符串的内容。这是预防某些类型的定时攻击的重要特性例如在一些安全关键的应用场景中攻击者可能尝试通过测量不同输入导致的响应时间差异来推断信息。 2. 二进制安全 hash_equals() 安全地处理二进制数据确保在比较过程中不会因为特殊字符如 NULL 字节而意外截断或错误处理。 3. 字符串比较 它专门用于比较字符串而不是用于其他数据类型。 一个典型例子是在用户认证系统中比较用户输入的密码哈希值与存储在数据库中的哈希值 $expected 存储的哈希值; $provided hash(sha256, 用户输入的密码);if (hash_equals($expected, $provided)) {// 密码匹配 } else {// 密码不匹配 }三, bool比较 1. 在json字符串中: $str {user:true, pass:true}; $data json_decode($str, true);if($data[user] root $data[pass] myPass){echo 登陆成功 获得flag{xx-ssss-xxxx}; }else{echo 登陆失败; }这里用户名和pass都是true, 由于使用的是判断, 两个比较的结果都是true. 2. 在序列化字符串中: $str a:2:{s:4:user;b:1;s:4:pass;b:1;}; $data unserialize($str); if($data[user] root $data[pass] myPass){print_r(获得flag{xx-ssss-xxxx}); }else{print_r(失败); }a:2: 表示一个数组包含 2 个元素。 s:4:user;b:1; 表示数组的第一个键值对。键是一个长度为 4 的字符串 “user”值是布尔值 true在 PHP 序列化格式中表示为 b:1。 s:4:pass;b:1; 表示数组的第二个键值对。键是一个长度为 4 的字符串 “pass”值也是布尔值 true。 那么用户名和pass都是true, 绕过了判断. 四, 极限值比较 $a98869694308861098395599991222222222222; $b98869694308861098395599992999999999999; var_dump($a $b);虽然两个值不同, 但是比较的结果是true. 五, switch比较 PHP 中的 switch 语句是松散比较而不是严格比较。这意味着类型强制转换会发生。 $num 3number; switch($num){case 0:echo 000;break;case 1:echo 111;break;case 2:echo 222;break;case 3:echo 333;break;default:echo error; }当 $num 3number; 时由于进行松散比较PHP 会尝试将这个字符串转换为数字。 由于字符串以数字 3 开始其余部分在转换过程中将被忽略因此 $num 被视为数字 3。 结果并不会输出error, 而是333. 六, in_array函数比较 在 PHP 中in_array 和 array_search 函数在默认情况下使用松散比较。 如果没有明确设置 strict 参数为 true这些函数会执行类型强制转换可能导致一些非直观的结果。 $array [a, 0, 1, 2, 3]; var_dump(in_array(abc, $array)); // bool(true) var_dump(array_search(abc, $array)); // int(1) in_array(abc, $array) 在比较 abc 和数组中的0时由于abc在松散比较中会被视为 0非数字开头的字符串在转换为数字时会成为 0因此 in_array 会返回 true。 同理array_search(abc, $array) 在寻找abc时也会找到0这个元素的位置因此返回 1。
http://www.pierceye.com/news/379267/

相关文章:

  • 泉州市服务好的网站设计塘沽网吧开门了吗
  • 商城网站建设哪家公司好wordpress输出到模板
  • 建站报价网站建设培训学校
  • 杭州高端网站定制手机网站开发应注意
  • 深圳网站建设选云聚达做二手元器件那个网站查价格
  • 网站建设公司企业模板微网站开发制作
  • 北京网站制作计划合理的网站结构
  • 网站建设如何搭建框架兰州seo排名
  • 网站作为医院形象建设cms搭建网站
  • 如何做个购物网站网站开发好不好
  • wordpress国内打开速度慢东莞搜索seo关键词
  • 鹿泉建设网站广安市建设局官方网站
  • 用花生棒自己做网站如何看网站的浏览量
  • 大连网站排名电商线上培训
  • 做金融网站做简历的网站
  • 求网站建设合伙人wordpress子页面怎么修改密码
  • 怎样登录建设互联网站厦门海绵城市建设官方网站
  • 网站怎么做权重互联网平台推广怎么做
  • 网站建设如果登录失败男生和男生做污的视频网站
  • 备案ip 查询网站查询系统制作一个网站的成本
  • 微网站排版p9制作公司
  • 国产在线免费观看高甜电影推荐爱站网seo工具包
  • 建设银行官方网站首页入口建立网站如何推广
  • 网站登录界面图片用什么软件做wordpress qiniu
  • 设计素材网站好融资吗关键词排名怎么做好
  • 亚洲购物网站排名网站开发看掉一些功能
  • 网站开发 需求dnf盗号网站怎么做
  • 淘宝客免费网站建设宝塔搭建wordpress主机地址
  • 可以看网站的浏览器wordpress+博客+简书
  • 游戏源码网站免费网站模板有哪些内容