10大优享服务
62项会员特权

网站开发语言php脚本保护

发布时间:2021-12-01 01:48:49     阅读次数:12891次     评论数:0次

3.1 脚本概念介绍
  在程序编写时优秀的程序员都会知道,用有意义的变量名,文件名有助于增加程序的可读性,具有良好的程序风格。这个非常好但在脚本语言不太适合,为了不让恶意用户猜到你的变量或数据库名等信息,必须改掉这些信息。动态的网页在服务器端执行后返回给客户的是执行后的代码,这可以保护服务器端的很多不想叫或不能叫浏览者知道的信息。安全是相对的,每天都在有新的安全漏洞被发现,如果恶意的用户在你之前知道了一个可以看你的脚本源代码的漏洞或这个漏洞一时间无法修补怎么办?

网站开发语言php脚本保护


3.2 脚本主意要点
  建议用一些比较怪异的名字命名,删掉脚本中的注释。如果还需要保持程序的可读性的话,可以建立一个映射,你可以写个具有良好风格的脚本程序,然后再做一个变量名映射建立一个具有较安全命名方法的脚本,去掉这个脚本中的注视和所有能去掉的信息,修改时作个同步就可以了我们可以在程序的使用前对程序进行加密,以保护我们自己的程序再万一的情况下部被泄漏。
3.3 脚本保护方法

  我看到过很多的对脚本的加密方法,都很不错,有的是专门的加密软件,有的是通过一些技巧加上利用语言的特性进行加密的,例如随机生成一个密匙,把密匙放在"不可见的"地方,通过一些算法对脚本进行加解密,就是由于某些系统漏洞导致你的脚本源代码泄漏,也无济于事。

4 . 脚本实例说明
  下面这个例子是在网上经常被提到的,这是个非常经典的例子,所以在这里通过这个实例告诉大家可能存在的危险。
问题描述:
  大部分网站把密码放到数据库中,在登陆验证中用以下sql,(以asp为例) 
sql="select * from user where username=’"&username&"’and pass=’"& pass &’" 
  此时,您只要根据sql构造一个特殊的用户名和密码,如:ben’ or ’1’=’1 
就可以进入本来你没有特权的页面。再来看看上面那个语句吧: 
sql="select * from user where username=’"&username&"’and pass=’"& pass&’" 
  此时,您只要根据sql构造一个特殊的用户名和密码,如:ben’ or ’1’=’1 这样,程序将会变成这样: sql="select*from username where
username="&ben’or’1’=1&"and pass="&pass&" or 是一个逻辑运算符,作用是在判断两个条件的时候,只要其中一个条件成立,那么等式
将会成立.而在语言中,是以1来代表真的(成立).那么在这行语句中,原语句的"and"验证将不再继续,而因为"1=1"和"or"令语句返回为真值.。

  另外我们也可以构造以下的用户名: 
username=’aa’ or username$#@60;$#@62;’aa’
pass=’aa’ or pass$#@60;$#@62;’aa’
  相应的在浏览器端的用户名框内写入:aa’ or username$#@60;$#@62;’aa 口令框内写入:aa’ or pass$#@60;$#@62;’aa,注意这两个字符串两头是没有’的。这样就可以成功的骗过系统而进入。

  具体实施是这样的,首先我会到注册的地方去收集信息,了解尽可能多的信息,例如目标数据库中都有用户的什么样的信息,随便的填写信息然后提交,当你要注册的用户名被注册的是有系统会提示你已被注册,有的网站做的更好的,就是他们专门给你设置的检测是否有已经被注册的功能,通过这样就会非常容易的找到目标--那个提示已被注册的用户,让后你在这个注册页里填写一些特殊的字符,如’,/,,等字符看系统如何提示,以证明程序员是否注意到了应该过滤字符或懂得是否应该过滤那些字符,在这页进行尝试是因为有的网站在登录的时候他会记录你的ip地址,当然你也可以找一个比你直接登录要快的代理服务器来做跳板。后面你要做的就是察看登录页的html源代码,看看是否有在客户端的字符过滤,看看这个程序员是用什么风格来编写程序,尽可能多的了解程序编写风格,这对你以后的某些判断有好处。如果有在客户端的过滤也不怕,你要搞清是什么样的过滤,能不能对攻击造成威胁,不要一看有过滤就害怕,可以尝试着用别的方法绕,就是使用自己精心打造的独立脚本,进行攻击。然后你要看看form的action中的url是否可以直接提交,在浏览器地址栏里直接提交,看看返回什么,是否有来路检测。还有很多细小的地方,你也应该可以注意到,例如那些地方程序员的整体的编写风格是什么,变量名定义的风格是什么等等,这个会帮我们"猜"到很多东西。还有别的其他什么,我也记不太清楚了,临场发挥吧。通过这些了解我们有如下几种可能:

1.那个程序员非常善良相信全世界都是好人,什么都没做,根本没有任何检测机制,我们直接用ername=’aa’ or username$#@60;$#@62;’aa’, pass=’aa’ or pass$#@60;$#@62;’aa’就可以搞定,现在这么善良的人少啦,可是你要是有耐心,找到这种人还是不难的。

2.这个程序员可能听别人提起过一些安全问题,毕竟现在这个那里都有人说,很多书中都有提及,但是做得不够好,他只进行了简单的输入过滤。
  过滤有两种方式,一种是在客户端的过滤,一种是在服务器端的过滤。现在很多的程序员考虑到再服务器端进行过滤可能给服务器造成更多的负荷,会把检测过程放在客户端。如果他在服务器端没做任何事情,那么还是可以对其进行攻击的,我可以将这个登录页的源代码COPY下来,然后自己建立一个文件把这些代码PASTE进去,再对这个文件进行进一步的深加工,去掉原来页的过滤机制,或者直接将攻击代码写到这个文件中去,然后将form中的action中的地址改成绝对地址,也就是将文件名改成"http://www.epwk.com/targer.php"这样,然后就可以提交啦。但是如果服务器端加上了"来路检测",你就白玩了。如果这样还是不行,我再换一种方法,在浏览器的地址栏里用?来输入参数,就好像
"http://www.epwk.com/targer.php?username=’aa’ or username$#@60;$#@62;’aa’&pass=’aa’ or pass$#@60;$#@62;’aa’ "然后敲回车吧,其实应该先尝试这种方法因为这用方法更简单,防护起来也很简单,这种提交方式不是post 而是get ,只要服务器端程序检测你的提交方法,就可以kill掉这个阴谋。如果单纯的只检测了"来路",还是不太安全的,可以先正确的提交一次,在提交过程中马上停止,就是保存这个环境,然后再构造请求。

本文由一品威客网编辑

本文地址:
来源:一品威客,转载须经版权人书面授权并注明来源

留言(0

↓展开留言

该攻略尚无留言记录