最后更新:2022-07-09 16:28:09 手机定位技术交流文章
什么是代码注入
代码注入攻击是指允许攻击者将源代码注入到网络应用程序的任何方法,从而获得解释和执行。
Python中常见的代码注入
eval()函数可以执行任意字符串格式代码的行
Theexec()函数可以执行字符串格式代码块
像素化对象的逆序列
运行Python文件
pickle.loads()代码注入
某不安全的用法:
注入的代码:
这些功能的滥用是危险的
os.system
os.popen*
os.spawn*
os.exec*
os.open
os.popen*
commands.*
subprocess.popen
popen2.*
一次模拟的实践
通过这一实践,我们发现系统中许多脆弱的安全组件,并实施了以下程序:
第三步是发现整个系统中两个可编码的漏洞。第一个不检查用户登录信息,以便重新排序像素,因此,当相应的存储介质(memcache, redis)不打开登录身份验证并容易泄露到公共网络时,代码被注入。第二个方法是直接将Python代码注入到配置中,使用eval函数执行系统中的某些配置。
使用逆壳请参见附录中提供的链接。
如何安全编码
这里只是几点:
eval()方法的说明:
ast.literal_eval()方法的说明:
通过注释我们可以了解eval函数和ast.iteral_eval函数的区别,等价函数可以将任何Python表达式编译成代码对象对象并执行它.East.literal_eval函数是安全的方法,strings,number,tuples,lists,dicts,booleans,None和多个Python对象,下面是详细的比较它们的差异。
eval禁止全球或局部变量:
使用asterisk.literal_eval()代替eval()对比:
寻找进化时期的突破点
这里是读者思考的地方,每个人都可以参加讨论的答复。 当我们试图最小化评价函数的能力时,仍然会有意想不到的方法来绕过和执行代码注射,如果有听力的话!
参考点:
安全使用漬物
在这里我们提供了一种安全使用漬物的方式,在这里大家可以回过头看看自己的项目中是否安全的使用了pickle。
如何提高安全编码意识?
我认为整个项目的最弱环节实际上是人,开发人员将更多地关注从需求到代码的设计实现,开发的速度和质量,而且,在某些情况下,最重要的安全并不易于量化和关注。普通用户更关心使用是否合理.少数用户将对如何检测和利用系统漏洞感兴趣,甚至加以破坏,当然,我们不想后者。
对外的系统我们会很注重系统的安全性,毕竟那一小部分用户带来的影响将是巨大的,而作为内部系统来说,安全性相对不那么重要了。
而作为开发人员我们如何提高自身的安全编码意识以及如何安全编码也是在所处环境中值得深思的一个问题。
[ Python学习]
欢迎加入新社区的Python学习者[王羊]:1020465983
他们一起探索编程知识,成为伟大的神。 他们还拥有软件安装软件包、实世界案例和学习材料
本文由 在线网速测试 整理编辑,转载请注明出处。