CN106506462B - 一种基于表单置乱的网站安全保护方法与装置 - Google Patents

一种基于表单置乱的网站安全保护方法与装置 Download PDF

Info

Publication number
CN106506462B
CN106506462B CN201610906183.2A CN201610906183A CN106506462B CN 106506462 B CN106506462 B CN 106506462B CN 201610906183 A CN201610906183 A CN 201610906183A CN 106506462 B CN106506462 B CN 106506462B
Authority
CN
China
Prior art keywords
list
scramble
field
randomization
name
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610906183.2A
Other languages
English (en)
Other versions
CN106506462A (zh
Inventor
傅书豪
王应军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN201610906183.2A priority Critical patent/CN106506462B/zh
Publication of CN106506462A publication Critical patent/CN106506462A/zh
Application granted granted Critical
Publication of CN106506462B publication Critical patent/CN106506462B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1441Countermeasures against malicious traffic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1433Vulnerability analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种基于表单置乱的网站安全保护方法与装置,对页面上的form表单进行变形,变形的方式包括对form表单中的字段名进行随机化处理,即将字段名变成一段无规律的字符串;调换字段之间的位置;在form表单中增加干扰字段。通过这样的方式,用户能够无差别地使用网站所提供的服务,但是对于实施自动攻击的恶意行为来说,变形之后的网页表单没有规律,从而攻击者很难根据表单的字段名来进行攻击。这种方式能够有效地阻止恶意攻击行为,包括CSRF、SQL注入、撞库、浏览器中间人攻击、信息泄漏等。

Description

一种基于表单置乱的网站安全保护方法与装置
技术领域
本发明属于信息安全技术领域,具体涉及一种基于表单置乱的网站安全保护方法与装置,本发明通过对表单中的字段名进行随机化,参数名位置移动,增加干扰参数的方法来提高网站的安全性。
技术背景
随着互联网、云计算、移动计算的高速发展,XSS攻击、SQL注入攻击CSRF攻击、点击劫持、文件上传、目录遍历等攻击手段严重威胁网站的安全。目前安全现状十分的严峻。超过半数的网站Web应用数据遭受泄漏,造成重大的财务损失。企业网站安全事件频发、遭受黑客勒索与竞争对手恶意攻击。根据360安全大数据报告,自从2011年CSDN泄密时间发生以后,网站遭受拖库和撞库的事件就不断的发生。到了2014年,撞库攻击达到了前所未有的高峰期,而且目前国内大部门的互联网企业都遭受到了撞库攻击,包括大众点评、印象笔记等。在网站被攻破之后,网页还会被篡改,包括植入钓鱼页面,黑词黑链,泛域名解析,搜索引擎劫持等。目前随着网站的增多,所遇到的安全问题也越多。相同环境下的网站也容易被攻破。
目前大部分的互联网公司在防御网络攻击上面的花费越来越大,但是还是无法阻止被入侵。在金融方面,传统的方法很难避免浏览器的中间人攻击而造成的财产损失。在电子商务领域,这些网站很难防御撞库攻击。任何的网站都会遭到恶意的自动化扫描,这样网站的安全性就很难得到保证。以上的问题都是目前所有的网站所面临的问题。
目前的方法仍不能有效地保证网站的安全。如果仅仅为网站部署WAF/IDS(Web应用防护系统/入侵检测系统)这样的防御设备,那么整个网站的安全性就完全依靠于这些设备,但是WAF/IDS这些设备也无法保证没有安全漏洞。如果黑客利用了WAF/IDS的设备的漏洞,那么黑客仍然攻破网站。同时新的攻击方法和攻击手段层数不穷,攻击者会根据目前的WAF/IDS的防御规则来对恶意代码或者是恶意软件进行变形以此逃脱安全检测。目前的所有的安全产品都无法提供一个安全的部署方法来保证网站不会被恶意的扫描、撞库以及浏览器的中间人攻击。这也是目前所有的网站所面临的严峻的问题和亟待解决的问题。
发明内容
为了解决上述技术问题,本发明提供了一种基于表单置乱的网站安全保护方法与装置。
本发明的方法所采用的技术方案是:一种基于表单置乱的网站安全保护方法,其特征在于,包括以下步骤:
步骤1:选择需要进行参数名随机化的PHP程序,并将PHP程序的源代码作为输入来进行分析;
步骤2:为PHP程序添加一个表单置乱的表单置乱库,用于为之后的表单置乱提供参数名随机化方法方法,包括对参数名进行随机化和对随机化后的参数名进行反解;
步骤3:分析整个PHP程序的源代码,找到其中的有form表单的页面;
步骤4:对form表单进行分析,找到其中敏感的表单字段;所述敏感字段包括用户名字段、密码字段、验证码字段;
步骤5:对步骤4中所分析出来的敏感表单字段调用在步骤2中所引入的表单置乱库中的参数名随机化方法对这些敏感字段的参数名进行随机化;
步骤6:对在步骤4中所分析出来的form表单后台处理程序中引入在步骤2中的表单置乱库对在步骤5中的已经随机化的参数名进行随机化反解;
步骤7:重复步骤4、步骤5、步骤6直到将整个PHP程序都分析完毕,最后得到的就是已经进行表单置乱保护的PHP程序。
作为优选,步骤2中所述表单置乱库,其置乱的方式有三种,分别是对表单中的字段名称进行随机化、字段的位置改变、在表单中加入干扰字段。
作为优选,所述对表单中的字段名称进行随机化,采用的AES加密算法,KEY与当前的用户和时间相关。
作为优选,所述字段的位置改变是调整字段在表单中的相对位置。
作为优选,所述在表单中加入干扰字段,是在表单中加入无意义的字段。
作为优选,步骤3的具体实现过程是静态分析PHP程序中所有的代码,通过正则表达式匹配的方式找到其中的form表单页面。
作为优选,步骤4的具体实现过程是首先筛选出input、select、textarea标签,然后通过字段之间的位置关系或者是字段的类型筛选出敏感字段。
作为优选,步骤5中,是对所有的参数或者是部分参数的字段名进行随机化,或同时修改参数之间的相对位置,或在表单中增加干扰字段。
作为优选,步骤6的具体实现过程是首先确定后台处理程序,在后台处理程序对参数进行提取之前,通过参数名随机化方法对所有的参数进行解密,然后再由后台处理程序进行处理,从而保证表单的结构完整性和语义完整性。
本发明的装置所采用的而技术方案是:一种基于表单置乱的网站安全保护装置,其特征在于:包括表单置乱库添加模块、form表单识别模块、表单敏感字段识别模块、参数名进行随机化处理模块、后台处理程序反解密模块、自动部署模块;
所述表单置乱库添加模块,用于为PHP程序添加一个表单置乱的表单置乱库,为之后的表单置乱提供参数名随机化方法,包括对参数名进行随机化和对随机化后的参数名进行反解;
所述form表单识别模块,用于分析整个PHP程序的源代码,找到其中的有form表单的页面;
所述表单敏感字段识别模块,用于对form表单进行分析,找到其中敏感的表单字段;
所述敏感字段参数名进行随机化处理模块,用于对分析出来的敏感表单字段调用表单置乱库中的参数名随机化方法对这些敏感字段的参数名进行随机化;
所述后台处理程序反解密模块,用于对分析出来的form表单后台处理程序中引入表单置乱库对已经随机化的参数名进行随机化反解;
所述自动部署模块,用于对PHP程序进行分析,并获得经过参数名置乱处理的PHP程序。
本发明的主要创新点有:
1.通过对form表单置乱的方式来动态地改变网页的表单内容,增强网站的安全;
2.该安全解决方案独立于已有的攻击模式和攻击签名,可以对抗已知和未知的攻击;
3.对服务端没有任何的要求,仅仅只需要提供PHP的源代码即可。
本发明的主要优点有:
1.表单置乱使得字段名名称变成一串无规律字符串,字段名之间的位置可以变化,在表单中插入部分无意义的字段名,使得攻击者很难根据字段名进行攻击,有效地避免网站受CSRF、SQL注入、撞库、信息泄漏之类的攻击,增强了网站的安全性;
2.部署简单,仅仅只需要在装置中填上需要进行表单置乱的PHP源代码的路径即可;
3.其在部署后的运行开销几乎为零;
4.核心库中的随机化方法采用高安全的密码算法以及与用户、时间、相关的密钥,难以被攻击者破解,确保了随机化的可靠性和安全性。
附图说明
图1:本发明实施例的装置原理图;
图2:本发明实施例的装置工作原理图。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图即实施例对本发明做进一步的详细描述,应当理解,此次所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。
本发明技术方案的目的在于通过对PHP源代码的静态分析,对表单进行置乱来动态地变换网页的内容以此来保障网站的安全性。
本发明提供的一种基于表单置乱的网站安全保护方法,包括以下步骤:
步骤1:选择需要进行参数名随机化的PHP程序,并将PHP程序的源代码作为输入来进行分析;
步骤2:为PHP程序添加一个表单置乱的表单置乱库,用于为之后的表单置乱提供参数名随机化方法,包括对参数名进行随机化和对随机化后的参数名进行反解;
本实施例的置乱的方式有三种,分别是对表单中的字段名称进行随机化、字段的位置改变、在表单中加入干扰字段。其中的随机化算法采用的AES加密算法,KEY与当前的用户和时间相关。这样就保证了黑客是无法得到KEY,同时也保证了每个用户以及同一个用户在不同时刻打开网站时,网页表单布局是不一样的。字段的位置的改变则主要是调整字段在表单中的相对位置并插入干扰字段。在表单中加入无意义的字段,其主要目的是干扰攻击者的恶意扫描。
步骤3:分析整个PHP程序的源代码,找到其中的有form表单的页面;
对于不同类型的PHP开源网站,form表单所在的位置是不一样的。常见的php开源代码如phpcms、phpbb、discuz,它们的form表单的位置都不相同,对于同一类型的开源网站,不同类型的文件都有可能含有表单。本技术方案对于目前常见的开源网站都能够很好的识别。对于少数使用了不常见框架的网站,则需要部署人员手动地修改代码来完成随机化部署。下面对页面渲染的情况和form表单的情况进行一个详细的说明。
由于PHP是一个弱类型的语言,可以和html相互嵌套,因此有很多方式可以渲染出前端的页面,而这些前端的页面中都有可能会存在表单,因此页面渲染的情况十分地复杂,目前渲染的方式有:
1.通过模板的方式来进行渲染,如利用smarty模板引擎或者是框架自定义的渲染引擎;
2.代码中没有html页面,都是通过PHP的echo方法来进行输出;
3.直接使用html来进行输出。
除此之外,由于PHP的特性,导致html代码和PHP代码可以相互嵌套在一起,增加了分析的难度。而这些渲染方式不同的问题,代码相互嵌套的问题都是在进行页面查找和表单识别必须解决的问题。
对于第一种使用渲染引擎来对页面进行渲染的方式,页面名称可以携带任何的后缀,如html、tpl.php、tpl、php等。但是对于同一个开源代码一般都只会有一种渲染方式,其渲染方式在进行部署之前就已经确定。
在确定了渲染引擎的后缀之后,接着分析在对应的页面中是否存在form表单。form表单的识别主要是根据是否含有常见的与表单相关的标签来进行确定的,常见的标签包括form标签、submit标签、input标签,或者是action的属性。通过以上的方式就可以判断出是否在渲染的页面中是否存在表单。
本实施例是通过静态分析PHP源程序中所有的代码。然后通过正则表达式匹配的方式找到其中的form表单页面。
步骤4:对form表单进行分析,找到其中敏感的表单字段以及表单对应的后台的处理程序;
敏感字段主要指的是用户名字段,密码字段,验证码字段。一般这些字段都是使用的input标签,但是这些input标签中的name属性一般会不一样,如对于用户名字段,name属性的值有可能是username,uname,email等等。鉴于这种情况的存在,就无法根据input的name属性来确定敏感字段。因此敏感字段是通过字段的相对位置来进行确定的。首先通过input的type为password的属性找到密码字段,然后根据目前大部分的表单的字段的排列规则,在密码字段的上方一般都是用户名字段。在在密码字段的下方一般都是验证码字段,通过这样的方式就可以确定所有的敏感字段。在确定了敏感字段之后,部署的时候就可以选择是对敏感字段进行随机化还是对所有的字段进行随机化。在正常情况下,为了方便后台的处理也为了加强网站的安全性,一般都是选择对表单中的所有字段进行随机化。
虽然在表单中的action字段中会有后台的地址,但是由于PHP程序在处理URL的方式不尽相同。对于后台处理方式包括URL路由,直接对应文件,或者是利用框架。所以很难根据URL来定位到表单提交的后台的处理程序。所以,程序首先会分析表单提交的后台的处理程序的位置,分析方法与步骤3中分析页面的渲染方式寻找表单页面的方式是一样的。首先是通过分析单个表单的处理逻辑找到后台的处理程序,然后通过这个找到的后台处理程序再找到其他的后台处理程序。一般情况下,后台的处理程序可能都会继承自一个共同类Base.class.php或者是都引用一个共同的文件common.php。找到类似功能的文件,加入随机化解密的代码即可完成整个网站的随机化解密。
本实施例首先筛选出input、select、textarea标签,然后通过字段之间的位置关系或者是字段的类型筛选出敏感字段。
步骤5:对步骤4中所分析出来的敏感表单字段调用在步骤2中所引入的表单置乱库中的参数名随机化方法对这些敏感字段的参数名进行随机化、调换字段的相对位置、在表单中增加干扰的字段。
在步骤2中已经说过,不同的PHP程序可能存在不同的页面渲染方式。渲染方式不同,那么使用的随机化方式也不相同。由于进行随机化时需要使用到本技术方案中的表单置乱库,这个需要以函数调用的方式来实现。但是渲染方式可能不支持这种方式;这都是需要解决的核心问题。
(1)直接使用html渲染;
对于直接使用html的方式来渲染的情况,如果html支持嵌套PHP代码,那么就可以直接使用表单置乱库中的方法来完成随机化的工作。如果html不支持PHP代码,那么就需要修改整个框架的设置,使之支持嵌套PHP代码。设置方法为,在开源代码的网站的根目录下,常见.htaccess文件。在其中加入如下代码:
AddType application/x-httpd-php.php.htm.html
以上的代码就是要求将程序中的html和htm文件都是以PHP的方式来进行解析。在配置完毕之后,就可以在html中加入PHP代码,PHP代码也可以被执行。页面中的表单代码一般如下所示:
<form id="register"action="">
<input type="text"name="uname"size="20"disaabled="true">
<input type="text"name="pwd"size="20"disaabled="true">
<input type="text"name="repwd"size="20"disaabled="true">
<input type="text"name="email"size="20"disaabled="true">
<input type="text"name="usertype"size="20"disaabled="true">
<input type="text"name="dosubmit"size="20"disaabled="true"value="提交">
</form>
使用本技术方案中的表单置乱库,本技术方案中的表单置乱库的方法封装在CSRFP_Randomization类中,此类对外提供了2个方法encrypt和decrypt方法,这2个方法分别是负责对参数名进行随机化和随机化反解的。在确定了表单之后,就可以使用encrypt方法对上述的表单进行随机化,随机化之后的结果如下:
<form id="register"action="">
<input type="text"name="<?php CSRFP_Randomization::encrypt(uname)?>"size="20"disaabled="true">
<input type="text"name="<?php CSRFP_Randomization::encrypt(pwd)?>"size="20"disaabled="true">
<input type="text"name="<?php CSRFP_Randomization::encrypt(repwd)?>"size="20"disaabled="true">
<input type="text"name="<?php CSRFP_Randomization::encrypt(email)?>"size="20"disaabled="true">
<input type="text"name="<?php CSRFP_Randomization::encrypt(usertype)?>"size="20"disaabled="true">
<input type="text"name="<?php CSRFP_Randomization::encrypt(dosubmit)?>"size="20"disaabled="true"value="提交">
</form>
通过调用本技术方案中的表单置乱库之后,就能够对表单中的字段进行随机化。
(2)使用模板渲染;
在通过模板来进行渲染时,也分为很多种不同的情况。例如有的参数使用了自定义的模板变量,有的则使用了自定义的方法来对模板变量进行操作。因此,如果是利用模板来进行渲染时,情况更加的复杂。
(2.1)使用了模板变量来进行页面渲染;
<input type="text"tabindex="1"name="{USERNMAE_CREDENTIAL}"id="{USERNMAE_CREDENTIAL}">
<input type="text"tabindex="2"name="{PASSWORD_CREDENTIAL}"id="{PASSWORD_CREDENTIAL}">
上述代码中的USERNAME_CREDENTIAL和ASSWORD_CRENDENTIAL都是使用了自定义的模板变量来进行申明的。在这种情况下,无法直接在其中直接嵌套PHP代码。由于这些自定义的变量都会在其他的PHP文件中进行定义,则需要找到这些变量定义赋值的地方,然后使用表单置乱库对这些变量进行随机化。例如上述的USERNAME_CREDENTIAL和_CREDENTIAL都是在functions.php来进行定义和赋值的,那么直接在赋值的地方使用表单置乱库CSRFP_Randomization的encrypt方法对其进行加密随机化处理。
(2.2)直接使用模板渲染;
直接使用模板渲染的意思是在form表单的地方没有使用自定义的模板变量,而是直接使用的原始属性。如下方代码所示。
<input type="email"tabindex="1"name="email"size="25"maxlength="100">
虽然是直接使用的模板来进行渲染的,但是和情况1中的直接使用html来进行页面渲染存在差别,这个无法直接在模板嵌套PHP代码,模板无法对其中的PHP代码进行识别,所以需要按照模板渲染的方式来对表单进行随机化。如果要在渲染模板中使用php代码,则需要使用<!--PHP-->标记才可以使用PHP代码。那么最后的部署代码就变为:
<input type="email"tabindex="1"name="<!--PHP-->echoCSRFP_Randomization::encrypt(uname)
<!--ENDPHP-->"size="25"maxlength="100">
通过使用<!--PHP-->和<!--ENDPHP-->来申明标签内的代码是PHP代码,这样在进行模板渲染的时候就会将其中的代码以PHP的方式来进行解析,这样就完成了随机化的工作。
(2.3)直接使用模板函数渲染;
直接使用模板函数渲染就是所有的变量的改变都必须通过预先定义函数的方式来对变量进行修改,无法通过在上述2.2中直接使用特殊的标签来运行PHP代码的方式来进行修改。
<label>{L('username')}:</label><input type="text"id="username"name="username">
上述代码中,其中{L{‘username’}就是使用模板来进行定义的,L就是模板定义的函数,如果想要修改其中的变量就必须使用类似L这样模板定义的方法,而这些方法需要是在对控制模板渲染的PHP文件中预先定义,因此要在控制模板渲染类中定义随机化的函数,这个随机化的函数主要就是调用本发明的表单置乱库中的方法。接着就利用使用定义的随机化函数来对变量名进行随机化。通过研究PHP开源代码发现,又有部分的PHP文件和所有的模板文件都默认引用了global.func.php文件,那么在global.func.php中加入本技术方案中的表单置乱库。引入表单置乱库之后,模板文件和PHP文件以及html文件都可以使用到其中的方法。
<input type="text"id="username"name="{CSRFP_Randomization:encrypt(username)}">
上述的代码就是使用表单置乱库进行随机化的一个示例代码。
(2.4)使用模板函数联合echo渲染;
使用模板函数联合echo输出的方式相比上述2.3中直接使用模板函数,这个就是增加了需要使用echo将最后的结果输送到页面上。例如在login.tpl.php文件中的渲染的代码为:
<input type="text"id="username"name="<?php echo L('username')?>">
上面的渲染代码中使用L这样的模板函数,同时也使用PHP语法,使用echo将变量进行输出。类似于上述2.3中,同样需要找出在L函数定义的地方,然后定义引入函数置乱库定义随机化参数名的方法,经过分析发现所有的模板参数定义的地方是位于global.common.php中,在此文件中引入本技术方案中的函数置乱随机库。引入之后,就可以在login.tpl.php中的随机化代码为:
<input type="text"id="username"name="<?php echoCSRFP_Randomization:encrypt('username')?>">
这样就完成了在使用模板函数联合echo方式下的参数名随机化的工作。
以上就是在对不同的开源框架进行随机化的过程中遇到的各种问题和相应的处理方法。上述所描述的情况基本上可以覆盖目前常见的页面的渲染方式。利用本技术方案中所述的部署方法就能够应付常见的开源框架的部署。
步骤6:对在步骤4中所分析出来的form表单后台处理程序中引入在步骤2中的表单置乱库对在步骤5中的已经随机化的参数名进行随机化反解;
在进行反解的时候需要综合考虑到对源程序的改动范围和改动的复杂程度。考虑到需要对所有的表单后台程序中的参数进行随机化,对于如何定位到所有的后台程序没有很好的方法,所以对于识别表单的处理程序的难度较大。最后通过对常见的PHP程序进行分析,发现目前后台的表单处理程序大部分都会继承自一个父类或者是应用公共文件。那么只需要在父类中完成对参数名的去随机化或者是在公共文件中完成去随机化都是可行的。
(1)引入公共文件;
通过分析发现,在开源代码中所有的PHP文件都会引入例如像global.common.php文件,这个文件中放入了一些公共的方法供其他的PHP文件进行调用,其中也包括处理表单的PHP文件,因此可以直接在这种公共文件中引入表单置乱库,然后调用其中的随机化反解的方法,对传入的所有的参数进行随机化反解,这样就在后台的处理程序之前完成了参数的去随机化的工作,那么之前的后台处理逻辑就不需要进行改变。最大程度地降低了部署的难度,同时也尽量减少了对原程序的修改。
以上代码就是在公共文件global.common.php中加入的代码。由于后台的处理程序都会引入该文件。那么上面的对POST中的参数的去随机化就会在后台处理程序之前运行,这样后台处理程序就不需要进行任何的修改,程序已经完成了参数去随机化的工作。
(2)继承父类;
所有的后台处理程序都会继承自同一个父类,在父类中对常见的后台的处理操作进行了封装。例如后台处理登陆的逻辑是在register.php中完成,其中在resgister.php中存在Regsiter_Request类,同样在处理登录页面中也存在Login_Request类。这两个类都是继承自request.php中的request类。所有的后台处理程序都是继承自request类,那么只需要在request中加上对参数的去随机化的代码,那么继承自request类的子类在处理表单逻辑之前都完成了随机化的参数的解密工作。对参数名的去随机化只需要在request中的构造函数中加入随机化解密的代码即可。
上述代码就是在request类中的构造函数中加入参数去随机化的代码。在父类中进行随机化之后,那么所有的后台的表单处理程序都不需要进行改变。
步骤7:重复步骤4、步骤5、步骤6直到将整个PHP程序都分析完毕,最后得到的就是已经进行表单置乱保护的PHP程序。
请见图1和图2,本发明提供的一种基于表单置乱的网站安全保护装置,包括表单置乱库添加模块、form表单识别模块、表单敏感字段识别模块、参数名进行随机化处理模块、后台处理程序反解密模块、自动部署模块;
表单置乱库添加模块,用于为PHP程序添加一个表单置乱的表单置乱库,为之后的表单置乱提供函数名随机化方法,包括对参数名进行随机化和对随机化后的参数名进行反解;
表单置乱库是整个发明的基础模块。这个库主要是提供字段名的随机化方法,表单中的字段相对位置调换,在表单中增加干扰字段。随机化方法的主要思想是,随机化的方法首先得到一个32位的字符串,然后通过SHA256的方法对这个32位的字符串进行加密,将加密之后的密文作为KEY,最后将这个KEY保存在会话中。接下来使用AES加密算法对需要随机化的字段名进行加密,最后返回加密之后的base64编码作为最终随机化之后的字段名。对随机化之后的字段名解密是使用AES加密算法进行解密。AES解密就是利用保存在会话中的key对随机化的字段进行解密。这些库中所有的加密算法没有采用私有的算法,都是来自于在PHP语言中自带的方法,包括SHA256算法,AES加密算法,base64算法。其中的key由于使用了rand()方法,保证了在每次会话时的唯一性。
form表单识别模块,此模块首先分析所有的PHP源代码,找到其中的含有form表单的页面。识别form表单的方法主要是判断在PHP的代码中是否存在form的html标签或者是submit的字段。如果存在则说明存在form表单接着进行下一步的处理。
表单敏感字段识别模块,此模块主要是对已经识别出来的form表单中的字段进行识别,分析出其中的敏感字段,例如用户名字段,密码字段。识别这些字段的方法主要是通过正则匹配的方式找到其中含有input、textarea、select字符串的标签,然后在通过这些标签的type属性来进行进一步的判断。如果type属性为Password,则说明此字段是密码字段。在通过用户名字段与密码字段的相对关系,可以分析出在密码字段的上一个字段是用户名字段。
参数名进行随机化处理模块,用于对分析出来的敏感表单字段调用表单置乱库中的函数名随机化方法对这些敏感字段的参数名进行随机化;
后台处理程序反解密模块,此模块主要就是用来解密随机化之后的字段名的。为了尽可能地少修改源程序,在后来处理程序之前会对POST中的已经随机化之后的参数进行反解。主要的代码如下所示:
通过上面的这段代码就可以将随机化之后的参数解密。最后整个程序就会进入到正常的后台逻辑处理中。
自动部署模块,此模块就是用来分析整个PHP程序,利用前面所提到的form表单识别模、后台处理程序反解密模块来对所有PHP程序中所有代码进行分析和修改,最终得到经过字段置乱的PHP程序。
本发明目前仅仅适用于PHP开发的网站,但是应用本发明的思想可以扩展到其他使用任意语言开发的网站的程序。为了清楚地描述实施过程,这里选取了在国内使用得比较多的phpcms的部署过程为例来进行说明。
首先,将phpcm整个程序的路径放在部署模块中的config.ini中。其中的testdir的值是phpcms根目录的路径。
在获得了phpcms的源程序之后,部署人员通过对phpcms程序的分析,发现所有的PHP页面都会引入global.func.php页面。部署程序就将表单置乱库的代码插入到global.func.php中,这样所有的PHP页面也会自动地引入表单置乱核心库。核心库的对字段的随机化主要是利用算法将字段名进行加密,同时将加密的KEY保存在会话中,保证了用户每次访问网站时的安全性。表单置乱库利用保存在会话中的KEY对随机化后的字段名进行解密完成去随机化。
接下来就是form表单的识别。首先部署人员对phpcms进行分析可以发现所有的页面都是*.html。通过遍历所有程序中所有的文件,找到其中后缀是html的文件,然后通过正则表达式来判断页面中是否存在“form”字段。如果存在,则说明此页面中存在form表单页面。
在识别了form表单之后,就需要对表单进行置乱处理。在*.html页面中,通过模板语言“{}”可以直接使用global.func.php中的方法。然后调表单置乱核心库中的字段名随机化方法就可以完成对字段名的随机化的工作。name=”{encrypt(‘username’)}”,这段代码就是对字段名为username进行随机化的一段示例代码。随机化其他的字段名的方式和上述的代码类似。除了随机化之外,还可以对字段之间的位置进行调换,在表单中插入无效字段来混淆攻击者。
在对表单中的字段名进行了随机化之后,接下来就需要在表单的后台处理程序上对随机化后的字段名进行去随机化,还原为原来的字段名。由于PHP程序都会引入global.func.php文件,包括后台的处理程序。通过分析,只需要在global.func.php中引入表单置乱库中的去随机化的代码,就可以适用于所有的后台处理程序。所以只需要在global.func.php插入如下的代码。
这样所有的表单处理程序在进入到正常的处理逻辑之前都会运行上面的这段代码,都会完成随机化字段的反解工作。
在进行了表单的敏感字段置乱的操作和随机化的敏感字段反解之后,接下来就是将上述的操作应用到整个的phpcms程序中。最后一步就是自动化部署。通过对phpcms源程序的扫描,遍历所有的文件,重复表单识别,敏感字段置乱的步骤就可以完成对phpcms的源程序的表单置乱的工作。
在完成了自动化部署工作之后,最后得到就是经过表单置乱保护的的phpcms的程序。
本发明技术的保护点在于通过表单置乱的方式来避免网站受到CSRF、SQL注入、撞库、信息泄漏、恶意扫描等攻击以此来保障网站的安全性。通过随机化字段名,调换字段的相对位置,插入干扰字段使得网页中的表单变得无序,使得自动攻击的恶意行为难以实施,但是又不影响用户的实际体验。部署本发明方案的网站的表单难以被黑客利用以此来实施攻击,很好地保障了网站的安全。
本发明主要就是对页面上的form表单进行变形,该发明独立于已有攻击模式和攻击签名。变形的方式包括对form表单中的字段名进行随机化处理,即将字段名变成一段无规律的字符串;调换字段之间的位置;在form表单中增加干扰字段。通过这样的方式,用户能够无差别地使用网站所提供的服务,但是对于实施自动攻击的恶意行为来说,变形之后的网页表单没有规律,从而攻击者很难根据表单的字段名来进行攻击。这种方式能够有效地阻止恶意攻击行为,包括CSRF、SQL注入、撞库、浏览器中间人攻击、信息泄漏等。
应当理解的是,本说明书未详细阐述的部分均属于现有技术。
应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的起始下,在不脱离本发明权利要求所保护的范围情况下,还可以进行替换和变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。

Claims (10)

1.一种基于表单置乱的网站安全保护方法,其特征在于,包括以下步骤:
步骤1:选择需要进行参数名随机化的PHP程序,并将PHP程序的源代码作为输入来进行分析;
步骤2:为PHP程序添加一个表单置乱的表单置乱库,用于为之后的表单置乱提供参数名随机化方法,包括对参数名进行随机化和对随机化后的参数名进行反解;
步骤3:分析整个PHP程序的源代码,找到其中的有form表单的页面;
步骤4:对form表单进行分析,找到其中敏感的表单字段以及表单对应的后台的处理程序;所述敏感字段包括用户名字段、密码字段、验证码字段;
步骤5:对步骤4中所分析出来的敏感表单字段调用在步骤2中所引入的表单置乱库中的参数名随机化方法对这些敏感字段的参数名进行随机化;
步骤6:对在步骤4中所分析出来的form表单后台处理程序中引入在步骤2中的表单置乱库对在步骤5中的已经随机化的参数名进行随机化反解;
步骤7:重复步骤4、步骤5、步骤6直到将整个PHP程序都分析完毕,最后得到的就是已经进行表单置乱保护的PHP程序。
2.根据权利要求1所述的基于表单置乱的网站安全保护方法,其特征在于:步骤2中所述表单置乱库,其置乱的方式有三种,分别是对表单中的字段名称进行随机化、字段的位置改变、在表单中加入干扰字段。
3.根据权利要求2所述的基于表单置乱的网站安全保护方法,其特征在于:所述对表单中的字段名称进行随机化,采用的是AES加密算法,其中的KEY与当前的用户和时间相关。
4.根据权利要求2所述的基于表单置乱的网站安全保护方法,其特征在于:所述字段的位置改变是调整字段在表单中的相对位置。
5.根据权利要求2所述的基于表单置乱的网站安全保护方法,其特征在于:所述在表单中加入干扰字段,是在表单中加入无意义的字段。
6.根据权利要求1所述的基于表单置乱的网站安全保护方法,其特征在于:步骤3的具体实现过程是静态分析PHP程序中所有的代码,通过正则表达式匹配的方式找到其中的form表单页面。
7.根据权利要求1所述的基于表单置乱的网站安全保护方法,其特征在于:步骤4的具体实现过程是首先筛选出input、select、textarea标签,然后通过字段之间的位置关系或者是字段的类型筛选出敏感字段。
8.根据权利要求1所述的基于表单置乱的网站安全保护方法,其特征在于:步骤5中,是对所有的参数或者是部分参数的字段名进行随机化,或同时修改参数之间的相对位置,或在表单中增加干扰字段。
9.根据权利要求1所述的基于表单置乱的网站安全保护方法,其特征在于:步骤6的具体实现过程是首先确定后台处理程序,在后台处理程序对参数进行提取之前,通过参数名随机化方法对所有的参数进行解密,然后再由后台处理程序进行处理,从而保证表单的结构完整性和语义完整性。
10.一种基于表单置乱的网站安全保护装置,其特征在于:包括表单置乱库添加模块、form表单识别模块、表单敏感字段识别模块、参数名进行随机化处理模块、后台处理程序反解密模块、自动部署模块;
所述表单置乱库添加模块,用于为PHP程序添加一个表单置乱的表单置乱库,为之后的表单置乱提供参数名随机化方法,包括对参数名进行随机化和对随机化后的参数名进行反解;
所述form表单识别模块,用于分析整个PHP程序的源代码,找到其中的有form表单的页面;
所述表单敏感字段识别模块,用于对form表单进行分析,找到其中敏感的表单字段;
所述参数名进行随机化处理模块,用于对分析出来的敏感表单字段调用表单置乱库中的参数名随机化方法对这些敏感字段的参数名进行随机化;
所述后台处理程序反解密模块,用于对分析出来的form表单后台处理程序中引入表单置乱库,对已经随机化的参数名进行随机化反解;
所述自动部署模块,用于对PHP程序进行分析,并获得经过参数名置乱处理的PHP程序。
CN201610906183.2A 2016-10-18 2016-10-18 一种基于表单置乱的网站安全保护方法与装置 Active CN106506462B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610906183.2A CN106506462B (zh) 2016-10-18 2016-10-18 一种基于表单置乱的网站安全保护方法与装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610906183.2A CN106506462B (zh) 2016-10-18 2016-10-18 一种基于表单置乱的网站安全保护方法与装置

Publications (2)

Publication Number Publication Date
CN106506462A CN106506462A (zh) 2017-03-15
CN106506462B true CN106506462B (zh) 2019-06-11

Family

ID=58293883

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610906183.2A Active CN106506462B (zh) 2016-10-18 2016-10-18 一种基于表单置乱的网站安全保护方法与装置

Country Status (1)

Country Link
CN (1) CN106506462B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107392014B (zh) * 2017-06-23 2021-04-30 复旦大学 基于数据库结构随机变化的sql注入防御方法和系统
CN110321668A (zh) * 2018-03-28 2019-10-11 郭亚茹 一种非基于编程的计算机运算逻辑的互联网共享技术
CN108875366A (zh) * 2018-05-23 2018-11-23 四川大学 一种面向php程序的sql注入行为检测系统
CN109729076B (zh) * 2018-12-19 2022-06-24 上海晶赞融宣科技有限公司 数据脱敏、逆脱敏方法及装置、存储介质、终端
CN112291352A (zh) * 2020-10-30 2021-01-29 杭州安恒信息安全技术有限公司 一种针对撞库和暴力破解的防护方法、装置、设备及介质
CN116150714B (zh) * 2023-04-20 2023-06-27 无锡弘鼎软件科技有限公司 用于软件开发数据的安全管理方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102685081A (zh) * 2011-03-17 2012-09-19 腾讯科技(深圳)有限公司 一种网页请求安全处理方法及系统
CN105610811A (zh) * 2015-12-24 2016-05-25 中国建设银行股份有限公司 认证方法及其相关的设备和系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102685081A (zh) * 2011-03-17 2012-09-19 腾讯科技(深圳)有限公司 一种网页请求安全处理方法及系统
CN105610811A (zh) * 2015-12-24 2016-05-25 中国建设银行股份有限公司 认证方法及其相关的设备和系统

Also Published As

Publication number Publication date
CN106506462A (zh) 2017-03-15

Similar Documents

Publication Publication Date Title
CN106506462B (zh) 一种基于表单置乱的网站安全保护方法与装置
Alwan et al. Detection and prevention of SQL injection attack: a survey
Deepa et al. Securing web applications from injection and logic vulnerabilities: Approaches and challenges
Fredj et al. An OWASP top ten driven survey on web application protection methods
Wei et al. Preventing SQL injection attacks in stored procedures
Nguyen-Tuong et al. Automatically hardening web applications using precise tainting
Li et al. A survey on web application security
CN107872456A (zh) 网络入侵防御方法、装置、系统及计算机可读存储介质
Sadqi et al. A systematic review and taxonomy of web applications threats
Nagpal et al. SECSIX: security engine for CSRF, SQL injection and XSS attacks
Wang et al. A new cross-site scripting detection mechanism integrated with HTML5 and CORS properties by using browser extensions
Choudhary et al. CIDT: Detection of malicious code injection attacks on web application
Kaur et al. Mitigation of SQL injection attacks using threat modeling
Dhivya et al. Evaluation of Web Security Mechanisms Using Vulnerability &Sql Attack Injection
Ravindran et al. A Review on Web Application Vulnerability Assessment and Penetration Testing.
Thai et al. A framework for website security assessment
Fredj Spheres: an efficient server-side web application protection system
Mahapatra et al. A survey of sq1 injection countermeasures
Patil et al. Design of efficient web vulnerability scanner
Raj et al. An SQL injection defensive mechanism using reverse insertion technique
Goyal et al. Beyond the Basics: A Study of Advanced Techniques for Detecting and Preventing SQL Injection Attacks
Al Rubaiei et al. SQLIA detection and prevention techniques
Srivani et al. A survey on client side and server side approaches to secure web applications
Jithin et al. SECURE-D: Framework For Detecting and Preventing Attacks in SQL and NoSQL Databases
George et al. A proposed architecture for query anomaly detection and prevention against SQL injection attacks

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant