惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
P
Palo Alto Networks Blog
大猫的无限游戏
大猫的无限游戏
量子位
S
Secure Thoughts
博客园 - 【当耐特】
V
Visual Studio Blog
腾讯CDC
爱范儿
爱范儿
Webroot Blog
Webroot Blog
The Register - Security
The Register - Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Latest news
Latest news
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
Cloudbric
Cloudbric
T
Troy Hunt's Blog
S
Security @ Cisco Blogs
B
Blog RSS Feed
I
Intezer
S
SegmentFault 最新的问题
N
News and Events Feed by Topic
云风的 BLOG
云风的 BLOG
C
CXSECURITY Database RSS Feed - CXSecurity.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
TaoSecurity Blog
TaoSecurity Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Recorded Future
Recorded Future
Google DeepMind News
Google DeepMind News
Forbes - Security
Forbes - Security
雷峰网
雷峰网
博客园 - 司徒正美
C
Cisco Blogs
S
Securelist
L
LINUX DO - 最新话题
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
N
News | PayPal Newsroom
N
News and Events Feed by Topic

龙辉's Blog - 学习笔记

天方云签程序开源 - 龙辉's Blog CTFSHOW-菜狗杯(部分WP) - 龙辉's Blog 贵州师范大学抢课脚本-正方教务系统V8.0.0 - 龙辉's Blog 简单实现每日健康自动打卡 - 龙辉's Blog php获取客户端ip以及ip伪造 - 龙辉's Blog XSS经典漏洞复现-手撕某非法获取个人信息网站 - 龙辉's Blog php7.2中each()函数被弃用的替换办法 - 龙辉's Blog 云签网站问题反馈贴 - 龙辉's Blog 高三第一次考试总结 - 龙辉's Blog
弱类型与强类型语言“=”号的不同以及引发的安全问题 - 龙辉's Blog
博主: Tinker-站长 · 2022-09-04 · via 龙辉's Blog - 学习笔记

弱类型与强类型语言中“=”号的不同

声明:以下文字仅为个人观点,如有不正确的地方欢迎指正

0x01

在编程语言中的 “=“ 号不同于在数学上的 ”=“号,在数学中,x=5 与 5=x 是一个意思,可以等量替换,但在编程语言中,x=5与5=x 就不同了,后者会报错 因为这里的等号是赋值,且变量名不能为数字开头,我认为”=“号是一个人类伟大的发明.

0x02 强类型语言

我们(我)知道c语言是一门强类型语言,而诸如python,php等则是弱类型语言。何为强类型?就是在变量声明的时候就预先将其规定类型,如 int a=1;我们可以很清楚的知道a变量是一个数字整型,数值为1,在大部分编译器中占4个字节, char b='1';这时b变量则是字符型,占一个字节,为字符 ‘1’,对应的十进制ascll码为49,若 a==b 则返回 false ,在比较a和b时,比较的是ascll码值 数值1 与 字符1显然不相等
V1D`EDW~G8{XU66{A2))24H.png
XR2EXH%1I1(OK3D%KS}~69E.png

0x03 弱类型语言

在弱类型语言中,大部分时候我们都不太需要提前定义声明变量和类型 如在php中$x = 5;$y = '5' ; 在弱类型语言中 "==”与C语言有所不同的是他比较的不是ascll码,而是数值 如 x==y$x==$y 返回的均是true.

上面的 "==" 更侧重相等,例如两条狗长的一模一样,而且还一样可爱,那么我们就认为它们相等,但是外表上一样,性格,习惯等又不相同,这里则使用“===”三个等号做判断,意思是全等,完全一个模样刻出来的。
引用上面的x和y变量 这时 $x===$y 则返回的是 fasle ,优先比较两者的类型
666

0x04 引发的安全问题

在编程语言中科学计数法的表示为 数值e整数,如 5e5 = 5*10^5,若e的前面为0,则后面不论是什么则为0,而null==0 返回true。
这是一个很神奇的地方, 1234=='1234abc' //返回true 比较数字 若数字相等则abc被忽略
DGBZ7G$U$C%)CF}UETE1P(U.png
例如 :

<?php
md5('QNKCDZO')==md5('240610708'); //返回true
0==md5('QNKCDZO') ; //返回true
0==null; //返回true
md5(array()) //返回null 某些版本会报错

假如以下是某个程序的登录判断

<?php
$user = trim($_GET['user']);
$pwd = trim($_GET['pwd']);
$pwds = $db->query("select pwd from user where user = $user");//密码为 s214587387a
if(md5($pwd)==md5($pwds)){
echo '登录成功';
}else{
echo '登录失败';
}

所以绕过登录就很简单,通过构造参数以及数组则可绕过验证。

localhost/?user=admin&pwd[]=666

把两个等号换成三个等号就可以
这是一道ctf的简单题...

0x05 优势与劣势

毫无疑问,在弱类型语言下三个等号的判断条件更为严格,目前版本的更新也越来越重视强制类。
两个等号提供给了程序员更灵活的处理方法,相对应的也会带来安全隐患


版权属于:龙辉博客

本文链接:https://blog.eirds.cn/399.html

如果没有特别声明则为本博原创。转载时须注明出处及本声明!

赞赏作者

如果觉得我的文章对你有用,请随意赞赏