所以你认为你可以编码?嗯,很高兴知道……世界肯定需要更多像你我这样的极客和书呆子……但是,你的程序安全吗?这就是整篇文章的全部内容。
作为一名程序员,确保您的代码没有任何可能被其他黑帽黑客利用的余量不仅是您的工作,也是您的道德责任。这就是安全编码的全部意义所在。如果您在 Google 上快速搜索有关 Secure Coding 的信息,第一个吸引您注意力的链接将是我们自己的 Wiki。
安全编码是一种以防止意外引入安全漏洞的方式开发计算机软件的做法。缺陷、错误和逻辑缺陷始终是普遍被利用的软件漏洞的主要原因。
好的!行话就够了……这到底是什么意思?让我给你举个例子。现在,既然我是个耍蛇人,我将使用Python 2.7x……
Python
#test_run.py
pswd ="MY PASSWORD"
not_secret ="Geeks rock!"
inputVal = input("Please enter number of geeks") #A VERY BAD IDEA
print "There are", inputVal,"geeks here, chanting", not_secret
现在,继续试一试……它编译成功,你知道吗,它提供了所需的输出!所以,这是我尝试不同输入时得到的……
运行 – 1
请输入极客数量5
There are 5 geeks here, chanting Geeks rock!
运行 – 2
请输入极客数量dir()
There are [‘pswd’, ‘not_secret’, ‘__builtins__’, ‘__doc__’, ‘__file__’,
‘__name__’, ‘__package__’] geeks here, chanting Geeks rock!
跑 – 3
请输入极客数量pswd
There are MY PASSWORD geeks here, chanting Geeks rock!
如果你到现在还没有意识到,让我声明一下……程序运行得很好!但是,不是我们想要的方式……它打印出我们的秘密数据……现在,你不能为此责怪语言,也不能责怪程序员……他/她做了他/她被要求做的事……这这是安全编码发挥作用的地方。现在,这个例子只是一个小例子,一个非常小的例子。利用程序的可能性是无穷无尽的。您所需要的只是聪明的头脑和利用漏洞的经验。而且,如果您是网络安全人员/gal,那么雇用对安全编码标准一无所知或知之甚少的编码员可能会被证明是您可能犯的最大错误。因此,为了拥有一个安全的职业未来,必须全面了解安全编码标准。
现在,谁能决定什么是安全的编码方式?这不是一个程序员可以做到的。谢天谢地,我们不需要为此烦恼。去看看SEI CERT 编码标准。它有一个非常好的推荐步骤集合,以确保您的程序是安全的,并且还根据编程语言(C、C++、 Java、Perl 和 Android)进行排序。但是,可悲的是,对于最简单的语言(在我看来),没有给出这样的标准。这是否意味着Python程序总是安全的?不!!幸运的是,一些Python爱好者着手为Python列出类似的建议,并导致了今天称为PEP 0008的诞生。它被称为Python代码风格指南,创建于 2001 年。
有了“安全”和“不安全”程序的详尽列表,它是任何Python程序员的必备品。
现在,足够的理论!让我们回到一些编码的东西!我现在将使用一个 Hi-Fi 术语,您可以进一步使用它来给某人留下深刻印象😉,该术语是跨站点脚本(XSS) 。在当前每个站点都有一个评论部分允许访问者分享他们的经验的情况下,XSS 已成为黑客常用的方法(不是一个好词!)窃取数据/启动分布式拒绝服务( DDOS)攻击/将病毒和恶意软件安装到客户端系统中,以及许多其他“不太好”的行为。
大多数评论部分允许用户用 HTML 代码编写以提供格式化的机会。这意味着首先处理评论,然后将结果打印在网站上。因此,假设我编写了这样的 JavaScript 代码而不是注释:
window.alert(“Your comment has been received! – Geeks4Geeks”);
现在,按照我刚才所讨论的,代码将被处理,客户端将收到一个弹出消息,“您的评论已收到! – Geeks4Geeks ”。这听起来不错……但是,想象一下可能性。可以编写一个简单的脚本,该脚本将在客户端系统中下载恶意软件/病毒,或者显示包含吸引他/她点击它的内容的广告,该广告将出现在可以窃取 cookie 的 IFrame 中(这称为点击劫持),这进一步导致了所谓的会话劫持;选择没有限制!那么,我们应该怎么做?同样,解决方案在于安全编码!只是举个例子,说明如何使用 Django 避免 XSS 和点击劫持:
#Clickjacking
response = render_to_response(“webpage.html”, {},
context_instance=RequestContext(request))
response[‘X-Frame-Options’] = ‘DENY’ #Frame Killing
response[‘Content-Security-Policy’] = “frame-ancestors ‘none’”
return response
# XSS
#Django 默认会转义 HTML,因此大多数程序都不会受到 #XSS 攻击
**{{ 内容 }}** #是安全的
**{{ contents|safe }}** #覆盖转义,不是一个好主意
所以,基本上总结就是,如果你想在编码领域取得成功,那么你应该养成遵循安全编码标准的习惯。为什么?因为只有那些公众无法访问的程序才是安全的……一旦所有人都可以使用它们,就会有很多人试图破坏您的代码……您最好注意这一点!
我就这样告辞了!
Auf Wiedersehen! ! (德语再见)
关于作者:
Vishwesh Shrimali是 BITS Pilani 机械工程专业的本科生。他满足
关于他的分支机构中没有教授的所有要求——白帽黑客、网络安全运算符和前竞争程序员。作为Python力量的坚定信仰者,他的大部分工作都使用同一种语言。每当他在编程、上课、观看 CSI Cyber 之余有一些时间时,他都会走很长一段路,默默地弹吉他。他的人生格言是——“享受你的生活,因为它值得享受!”
如果您还想在这里展示您的博客,请参阅GBlog ,了解GeeksforGeeks 上的客座博客写作。