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

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

龙辉's Blog

对学某通的登录逆向分析 - 龙辉's Blog 天方云签程序开源 - 龙辉's Blog 蓝桥杯省赛Web题解及知识点复习 - 龙辉's Blog CTFSHOW-菜狗杯(部分WP) - 龙辉's Blog 记录一次入侵某钓鱼盗号网站的过程 - 龙辉's Blog 贵州师范大学抢课脚本-正方教务系统V8.0.0 - 龙辉's Blog 简单实现每日健康自动打卡 - 龙辉's Blog php获取客户端ip以及ip伪造 - 龙辉's Blog XSS经典漏洞复现-手撕某非法获取个人信息网站 - 龙辉's Blog php7.2中each()函数被弃用的替换办法 - 龙辉'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

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

赞赏作者

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