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

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

龙辉'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

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

赞赏作者

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