线上服务咨询
PHP开发不能违反的安全规则
发表时间:2019-07-30 16:45:47
文章来源:沈阳软件开发
标签:网站建设 小程序开发 小程序制作 微信小程序开发 公众号开发 微信公众号开发 网页设计 网站优化 网站排名 网站设计 微信小程序设计 小程序定制 微信小程序定制
浏览次数:0
您必须了解的有关Web应用程序安全性的第一件事是您不应该信任外部数据。外部数据包括程序员不直接在PHP代码中输入的任何数据。来自任何其他来源(例如GET变量,表单POST,数据库,配置文件,会话变量或cookie)的任何数据都是不可信的,直到采取措施确保安全性为止。
例如,以下数据元素可以被认为是安全的,因为它们是在PHP中设置的。
清单1.安全可靠的代码$ myUsername='tmyer'; $ arrayarrayUsers=阵列( 'tmyer', '汤姆', '撬');定义( “问候语”, 'hellothere' $名为myUsername。);>但是,以下数据元素存在缺陷。
清单2.不安全,有缺陷的代码$ myUsername=$ _ POST ['username']; //受污染! $ arrayarrayUsers=阵列($名为myUsername, '汤姆', '撬'); //污点! define(“GREETING”,'hellothere'。$ myUsername); //污染了!>为什么第一个变量$ myUsername有缺陷?因为它直接来自POST表单。用户可以在此输入字段中输入任何字符串,包括清除文件或运行以前上载的文件的恶意命令。你可能会问,“难道你不能使用客户端(Javascrīpt)表单验证脚本只接受字母AZ以避免这种危险吗?”是的,这总是一个很好的步骤,但正如你将在后面看到的那样。任何人都可以将任何表单下载到他们自己的机器上,进行修改,然后重新提交他们需要的任何内容。
解决方案很简单:您必须在$ _POST ['username']上运行清理代码。如果你不这样做,那么在任何其他时候使用$ myUsername(例如在数组或常量中),你可以污染这些对象。清理用户输入的简单方法是使用正则表达式来处理它。在此示例中,您只想接受字母。将字符串限制为特定数量的字符或者要求所有字母都是小写也是一个好主意。
清单3.使用户输入安全$ myUsername=cleanInput($ _ POST ['username']); //干净! $ arrayarrayUsers=阵列($名为myUsername, '汤姆', '撬'); //干净! define(“GREETING”,'hellothere'。$ myUsername); //干净! functioncleanInput($输入){$=清洁用strtolower($输入); $ clean=preg_replace(“/[^ az] /”,“”,$ clean $ clean=substr($ clean,0,12); return $ clean;}?>规则 2:禁用那些使安全性难以实施的PHP设置
我已经知道我不能信任用户输入,我应该知道我不应该相信我在我的机器上配置PHP的方式。例如,请务必禁用register_globals。如果启用了register_globals,您可能会做一些粗心的事情,例如用$ variable替换同名的GET或POST字符串。通过禁用此设置,PHP会强制您在正确的命名空间中引用正确的变量。要使用POST形式的变量,您应该引用$ _POST ['variable']。这不会将此特定变量误解为cookie,会话或GET变量。
规则 3:如果不能理解它,就不能保护它
一些开发人员使用奇怪的语法,或者非常严格地组织语句以形成简短但模糊的代码。这种方法效率很高,但如果您不了解代码的作用,则无法决定如何保护它。例如,您喜欢以下两段代码中的哪一段?
清单4.使代码易于保护//obfuscatedcode $ input=(isset($ _ POST ['username'])?$ _ POST ['username']:“); //unobfuscatedcode $ input=''; if(isset($ _POST ['username'])){$ input=$ _ POST ['username']; } else {$ input=''; }在第二个更清晰的代码片段中,很容易看到$ input存在缺陷,需要在安全处理之前进行清理。
规则 4:“纵深防御” 是新的法宝
本教程将使用示例说明如何在处理表单的PHP代码中执行必要步骤时保护联机表单。同样,即使您使用PHP正则表达式来确保GET变量是完全数字的,您仍然可以采取措施来确保SQL查询使用转义用户输入。深度防御不仅仅是一个好主意,它确保你不会陷入严重的麻烦。现在已经讨论了基本规则,让我们来看看第一个威胁:SQL注入攻击。
网站建设,小程序开发,小程序制作,微信小程序开发,公众号开发,微信公众号开发,网页设计,网站优化,网站排名,网站设计,微信小程序设计,小程序定制,微信小程序定制