基于 PHP 的信息系统数据安全性分析与探讨,网站建设论文-钱柜娱乐777
钱柜娱乐,钱柜娱乐777
您现在的位置:代写本科论文 > 计算机论文 > 网站建设论文 > 基于 PHP 的信息系统数据安全性分析与探讨
基于 PHP 的信息系统数据安全性分析与探讨
发布时间:2017-11-23 点击次数:

摘要:随着信息化技术的推动和发展,信息系统安全日益重要,本文从信息系统数据合法性、MySQLi 扩展的预处理机制、混淆式的密码算法等方面对信息系统数据安全性建设进行了分析及探讨.


关键词:PHP;数据安全;密码算法


0 引言


对于互联网企业,信息系统中承载着大量的数据,尤其是在线购物、网络银行等系统,对于安全性的要求非常严格.一旦出现安全漏洞,在严重情况下会导致数据泄露、篡改、窃取,造成系统瘫痪等问题,将会给企业带来不可估量的损失,所以说系统数据安全至关重要.接下来,本文将从以下几方面分析与探讨系统数据的安全性建设问题.


1 预防非法表单提交并验证数据合法性


任何软件通过 HTTP 协议都可以向 Web 服务器提交数据,可以更换表单中的控件,伪造另一个表单.假设域名为"http://www.xxx.com"的服务器中有一个 edit.php 文件用于接收表单信息.原表单中有一组单选按钮,只能选择 C#或 PHP.如果编造一个 HTML 页面,把单选按钮替换为文本框,内容随意编写,并将表单提交给 http://www.xxx.com/edit.php,而服务器无法分辨真伪表单.要预防非法表单提交,比较好的方式是根据一个惟一的字符串或时间戳生成一个令牌,并将这个令牌放在会话变量和表单隐藏域中.提交表单之后,检查两个令牌是否匹配.如果不匹配,就知道有人伪造表单向 Web 服务器发送数据.简略代码如下.


$token = md5(uniqid(rand(), true));$_SESSION['token']=$token;


再者 Web 表单利用浏览器限制了提交的内容,但无法限制服务器接收什么样的内容.因此,对于用户输入的内容,一定要验证数据的合法性.在对用户提交内容进行验证时,可以利用正则表达式实现复杂的验证规则.比如验证 18 位身份证号.在 PHP 中,可以使用 preg_match()函数进行正则匹配,该函数的第 1 个参数表示正则表达式,第 2 个参数表示带匹配的字符串,返回值为匹配的次数.具体代码如下.


$id = $_POST['id']; //接收身份证号if(! preg_match('^(d{6})(d{4})(d{2})(d{2})(d{3})([0-9]|X)$', $id)){ echo ' 身份证号格式不符合要求 ';} //验证身份证号是否合法通过 preg_match()函数对身份证号进行验证,当函数返回的匹配次数为 0 时,表示输入的字符串不符合规则.


2 防御 SQL 注入


SQL 注入是开发人员未对用户输入的数据进行过滤就拼接到 SQL 语句中执行,导致用户输入的一些特殊字符破坏了原有 SQL 语句的逻辑,造成数据被泄露、篡改、删除等危险的后果.比如下列代码就存在 SQL 注入问题.该代码将来自外部的 name 数据直接拼接到 SQL 语句中,如果用户输入了单引号,则会将原有 SQL 语句中的单引号闭合,然后用户就可以将自己输入的内容当成 SQL 执行.


$name = $_POST['name'];$result=mysqli_query($link, "SELECT * FROM `admin`WHERE `name`='$name'");假设用户输入"'or 1='1",SQL 语句将变为 SELECT *FROM `admin` WHERE `name`='' or 1='1'.此时就会通过or 条件查询出 admin 表中所有的记录,造成了数据的泄露.接下来改进上述代码,操作数据库使用了 MySQLi 扩展的预处理机制,将 SQL 语句和数据分离,从本质上避免了 SQL 注入问题的发生,同时也更加高效,简略代码如下.


$name = $_POST['name']; //接收变量$stmt = mysqli_prepare ($link, 'SELECT * FROM`admin` WHERE `name`=?');//创建 SQL 语句模板,预留的变量$name 值使用参数 "?" 标记.mysqli_stmt_bind_param ($stmt, 's',$name);//将邦定的变量$name 值传递给参数("?" 标记),s 表明$name 数据类型.mysqli_stmt_execute($stmt);//执行预处理语句,应用可以多次执行语句,如果参数的值不一样.


$result = mysqli_stmt_get_result($stmt);//从预处理语句中获取结果集.


3 防御 XSS 攻击


XSS(Cross Site Scripting,跨站脚本攻击)产生的原因是将来自用户输入的数据未经过滤就拼接到 HTML 页面中,造成攻击者可以输入JavaScript 代码来盗取系统用户的 Cookie、破坏页面结构、重定向到其它网站等.由于Cookie 在系统中承载着保存用户登录信息的作用,一旦Cookie 被盗取,攻击者就得到了受害用户登录后的权限,造成一系列危险的后果.


在防御 XSS 攻击时,对于普通的文本数据,使用htmlspecialchars()是最好的方法.该函数可以转义字符串中的双引号、尖括号等特殊字符,但是默认情况下,单引号不会被转义.例如,以下代码存在 XSS 漏洞.


$name = htmlspecialchars($_POST['name']);//接收来自用户输入的数据echo " <input type ='text' value =' $name' /> ";//拼接到HTML 中上述代码中,由于用户可以输入单引号,因此可以通过单引号闭合原有的 value 属性,然后在后面可以添加事件属性如 onclick,通过这种方式来注入 JavaScript 代码,如下所示.假设用户输入"' onclick='alert(document.cookie)",输出结果为:<input type ='text' value ='' onclick ='alert (document.cookie)' />


上述代码被浏览器执行后,攻击者注入的 JavaScript代码就会运行,这将威胁信息系统和用户的安全.由于XSS 攻击的主要目的是盗取 Cookie,因此可以为系统中最关键的 PHPSESSID 这个 Cookie 设置 HttpOnly 属性.通过该属性可以阻止 JavaScript 访问该 Cookie.


4 数据安全存储


4.1 混淆密码算法


当信息系统因漏洞导致数据被泄漏时,管理人员往往无法在第一时间知道,一旦用户的密码遭到窃取,将造成难以挽回的损失.因此,在信息系统开发时,要加强密码存储的安全性,此时通常用到单项散列函数,比如 md5,sha 等.函数对密码进行摘要运算,用于校验两个数据是否相同.如md5 函数运算后得到一个由 32 个字符组成的信息摘要,不同的数据产生的 md5 信息摘要不同.理论上,通过 md5 生成的字符串无法逆向获得原始数据.sha-1 算法的安全性逐年降低,已被由安全强度更高的 sha-2 替代,sha-2 系列包括 sha-224、sha-256、sha-384 和 sha-512.其中,sha-256和 sha-512 分别生成 256 和 512 比特长度的 hash 字符串,都是比较常见的安全领域的 hash 应用.而 sha-256 比 md5等更具安全性,也是 sha 系列算法最快的.


但随着密码学研究的不断深入和计算机技术的快速发展,许多密码破解机构使用了彩虹表等技术运算并存储了海量字符串的 md5 运行结果,导致对密码直接进行MD5 运行已经无法满足安全需求,此时可以采用混淆式的密码算法以提高破解难度.混淆式一是对密码进行加密存储时,首先对密码进行 md5 运算,对密码的运算结果再连接 salt 即盐值进行第二次或多次 md5 运算.另外,对密码进行存储时,通常会为不同的用户加不同的 salt,从而进一步加强密码破解的难度.函数 md5(CONCAT(md5(密码),盐值))两次运算结果连同佐料可以使 INSERT INTO语句存储到数据库中.混淆式二是先启用混淆式一进行加密.接下来使用函数 str_split()将密文按照字符分隔成数组,函数 array_map'(ord',数组)将密文的每个字符转换成ASCII 码值,然后使用函数 hash ("sha256",ASCII 码值)对ASCII 码值一一加密,最终生产 2048 个字符的密文.在登录时取出数据库中保存的密码和 salt,然后对用户输入的密码按照 salt 调用如下的 password()函数进行运算或再进行 Hash 函数运算,如果运算结果与数据库中保存的结果相同,则成功登录.混淆加密方式比较多,再比如如基于md5 与 base64 的混合加密算法,以上这些加密算法都能增强采用彩虹表技术逆向破解的难度.


function password($password, $salt){return md5(md5($password).$salt);}


4.2 加密扩展


库md5()的功能方面存在一定的限制,PHP 加密扩展库Mcrypt、OpenSSL 和 Mhash 则提供了更加全面的加密与解密方法.其中,Mcrypt 扩展库提供了类型、算法及模式繁多的 加 解 密 功 能 . Mcrypt 支 持 的 数 据 加 密 模 式MCRYPT_MODE_ECB 适用于短小随机数据的加密, 可以用这种模式来加密其它密钥.如要加密安全等级较高的重要文件,可选择 MCRYPT_MODE_CBC 加密模式.而MCRYPT_MODE_CFB 模式对于每个单独的字节都进行加密 , 所 以 非 常 适 用 于 针 对 字 节 流 的 加 密 .MCRYPT_MODE_NOFB 由于采用了块操作算法,安全性更高.为了提高安全性,可以对密钥进行加密,如$key=hash('sha256', 'thisis a secret key', true),这样生成 256 比特的密钥.此时再用 Mcrypt 的加密函数去加密数据.在解密时解密函数用到的算法、密钥以及加密模式等参数必须和加密函数一致,否则数据不会被还原,所以说 mcrypt 常用在对称加密中.openssl 扩展使用 openssl 加密扩展包,封装了多个用于加密解密相关的 PHP 函数,极大地方便了对数据的加密解密,OpenSSL 常用在非对称加密中.非对称加密的核心思想是使用一对相对的密钥,分为公钥和私钥,私钥自己安全保存,而将公钥公开.如果用公钥对数据进行加密,只有用对应的私钥才能解密.如果用私钥对数据进行加密,那么只有用对应的公钥才能解密.非对称加密克服了对称加密中密钥的保管问题,因为对称加密中消息发送方和接收方任意一方的密钥丢失,都会导致信息传输变得不安全.Mhash 是基于离散数学原理的不可逆向的php 加密方式扩展库,支持 MD5、SHA、CRC32 等多种散列算法,可以通过 mhash()函数、mhash_keygen_s2k()函数创建信息摘要和校验值.


5 结束语


信息系统建设面临着不少的安全隐患,其安全性建设是一个全方位长期不断完善的过程,本文从非法表单提交的角度出发,对系统数据的安全性进行分析与探讨,以期能给用户提供一些便利.


参考文献:


[1]巩明.基于 PHP 实现数据安全性的方法及比较[J].通讯世界,2015(05).

[2]刘家栋.PHP 网站常见安全漏洞及防范措施[J].计算机与网络,2016(Z1).

[3]焦显伟,闫品.基于 PHP 招生管理信息系统[J].价值工程,2016(29).


版权所有:钱柜娱乐777专业权威的论文代写、论文发表的网站,秉承信誉至上、用户为首的服务理念,服务好每一位客户
本站部分论文收集于网络,如有不慎侵犯您的权益,请您及时致电或写信告知,我们将第一时间处理,邮箱:gs@shlunwen.com
分享到:QQ空间新浪微博腾讯微博人人网微信