本网站是由硕士、博士和高校教师组成的专业代写团队所创办的平台。主要为在校本科生、专科生、硕士生、在 职研究生、单位公司人员、留学生等提供各种专业代写毕业论文服务的网站。提供的写作服务包括:代写MBA论文、代写MPA论文、代写EMBA论文、代写硕 士论文、代写本科毕业论文、代写专科毕业论文、代写研究生论文、代写留学生毕业论文、代写英语论文等等。作为八年的品牌,已经为几万名毕业生服务,让他们 顺利通过了毕业论文的考核。本站负责提纲、开题报告、文献综述以及毕业论文的写作,并提供不限次数的修改服务。所代写MBA论文价格、代写MPA论文费 用、代写EMBA论文价钱都是最实惠的,欢迎咨询!
YM,机电教授,YMT,日本千叶博士,教授
海豚,英国留学管理博士学历
LB,经济管理博士英国交流
maomao,经济硕士管理博士
陈先生,湖南计算机博士,7年教育经验。硕士研究生导师。
BJX,上海交大计算机博士,发表40多篇核心学术论文,
电子计算机类博士,3人组合
LLBZY,5人,工程,园林,农业生态中科院博士,参与国家重点项目研究
浙大,管理硕士,英语专业硕士
y,男,法学硕士
中国XX大学,会计硕士,英语硕士,管理硕士
各一名
熊,浙江,管理学博士,经济学硕士,擅长管理,金融、宏观经济、区域经济
英语专业硕士,英语,翻译论文
11,硕士,自由撰稿,编辑,经济、法律、品牌
文,硕士,擅长企业管理,行政管理, MBA论文
兰大的硕士,西哲,社科
刘先生,擅长写作金属材料领域的专业论文
澳大利亚摩尔本皇家理工大学的MASTER
医学主治医师,某医学杂志编辑
剑,38,教育学硕士
某核心医学编辑
某中学杂志编辑
R,管理财会硕士,研究员
武汉工程博士,男,土木,结构,水电道路工程等
土木工程硕士,男,35岁,擅长工科土木工程,房建,园林,市政论文
左先生,武大MBA,擅长经济,管理,商业类论文
陈先生,大学本科副教授,英语专业硕士
陆先生,中科院基础医学研究生
杨先生,27岁, 武汉大学硕士,营销管理专业,武汉社科研究员,中国策划研究院协会会员,管理顾问公司总监。擅长经济管理、市场调查、行业研究报告。服务客户有中国银行,中银保险,香港铜锣湾百货等著名企业。
林先生,28,信息专业硕士,计算机研究室主任,国家高级电子商务培训讲师。
周先生,31,国内著名DVD品牌技术总监,重点高校讲师,期间指导学生获得全国电子大赛二等奖,指导老师二等奖。擅长电子类论文。
某艺术工作室,硕士学历,擅长现代艺术美术理论研究及创作。
刘先生,某著名医学院硕士研究生,某著名医学院博士研究生,专业为妇产科护理,以多产,高速,高质量著称。
kerry,北京某著名大学教师,擅长教育类论文。
时间:2019-09-27
摘要:随着信息化技术的推动和发展,信息系统安全日益重要,本文从信息系统数据合法性、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).