php表單提交程序的安全使用方法第1/2頁(yè)
更新時(shí)間:2008年07月10日 23:41:00 作者:
是對(duì)一個(gè)接收自由提交表單數(shù)據(jù)的文件進(jìn)行安全性分析,希望對(duì)各位有幫助。首先說明一下,代碼中的error()和succeed()是我自定義的函數(shù)
用于顯示錯(cuò)誤信息和成功信息,其實(shí)也可以直接echo出錯(cuò)誤信息,這里我只是想我的出錯(cuò)信息頁(yè)面漂亮點(diǎn),定義了一個(gè)頁(yè)面輸出的函數(shù)罷了。
<?php
// savecomment.php// 大家先不要看注釋,看完本文后,再回過頭來看
require ("config.php");
mysql_connect($servername,$dbusername,$dbpassword) or die ("數(shù)據(jù)庫(kù)連接失敗");
$name=$_POST['name'];
$content=$_POST['content'];
$blogid=$_POST['blogid'];
$datearray=getdate(time());
$date=date("Y-m-d h:i:s",$datearray[0]);
if (!empty($name) && !empty($content)){
//用empty函數(shù)判斷表單非空的話則往下。
if(strlen($name) > 20){
//通過非空判斷則開始判斷$name的長(zhǎng)度。
error(“名字超過20個(gè)字節(jié)(20個(gè)英文或10個(gè)漢字)<br>”);
}
f(!is_numeric($_POST['blogid'])){
error(“隱藏?cái)?shù)據(jù)被非法修改過,請(qǐng)返回<br>”);
}
//由于$blogid待會(huì)是要放進(jìn)select的,此變量是用來標(biāo)示評(píng)論是屬于哪篇文章,它是int類型,雖說是隱藏變量,但攻擊者也是可以在本地修改遠(yuǎn)程提交的,所以我們?cè)诜胚M(jìn)select之前需要檢查類型。
$blogsql = "Select * FROM $comment_table Where blogid=$blogid"
$blogresult = mysql_db_query($dbname, $blogsql);
$blog = mysql_fetch_array($blogresult);
if(strlen($name) == strlen($blog[name]) && strlen($content) == strlen($blog[content])){
//查詢數(shù)據(jù)庫(kù)的兩個(gè)字段的長(zhǎng)度,因?yàn)槊珠L(zhǎng)度可能相同,但兩個(gè)都相同正常情況下出現(xiàn)的幾率就相當(dāng)小了,所以用&&同時(shí)判斷。
error(“你欲提交的內(nèi)容評(píng)論里已存在,請(qǐng)返回<br>”);
}
//下面就開始判斷時(shí)間間隔。更詳細(xì)的說明請(qǐng)看文章后面內(nèi)容。
session_start();
if(session_is_registered("time") && time()-$_SESSION['time']<60*2){ error(“對(duì)不起,你兩次提交的時(shí)間間隔還不到2分鐘<br>”);
} else {
$sql="Insert INTO $comment_table(date,name,content,blogid) VALUES('$date','$name','$content','$blogid')"
mysql_db_query($dbname,$sql);
mysql_close();
$time=time();
session_register("time");
succeed(“評(píng)論提交成功<br>”);
}}
//結(jié)束非空的判斷
error(“你沒有填寫完所有表單<br>”);
?>
上面是一個(gè)記錄評(píng)論數(shù)據(jù)的文件。表單如下:
<form action="savecomment.php" method="POST">
<input type="hidden" name="blogid" value="<?=$row[blogid]?>">
您的名字:<input name="name" type="text" size="20" maxlength="100">
評(píng)論內(nèi)容:<textarea name="content" cols="60" rows="8"></textarea>
<input type="submit" name="Submit" value="提交"></form>
復(fù)制代碼 代碼如下:
<?php
// savecomment.php// 大家先不要看注釋,看完本文后,再回過頭來看
require ("config.php");
mysql_connect($servername,$dbusername,$dbpassword) or die ("數(shù)據(jù)庫(kù)連接失敗");
$name=$_POST['name'];
$content=$_POST['content'];
$blogid=$_POST['blogid'];
$datearray=getdate(time());
$date=date("Y-m-d h:i:s",$datearray[0]);
if (!empty($name) && !empty($content)){
//用empty函數(shù)判斷表單非空的話則往下。
if(strlen($name) > 20){
//通過非空判斷則開始判斷$name的長(zhǎng)度。
error(“名字超過20個(gè)字節(jié)(20個(gè)英文或10個(gè)漢字)<br>”);
}
f(!is_numeric($_POST['blogid'])){
error(“隱藏?cái)?shù)據(jù)被非法修改過,請(qǐng)返回<br>”);
}
//由于$blogid待會(huì)是要放進(jìn)select的,此變量是用來標(biāo)示評(píng)論是屬于哪篇文章,它是int類型,雖說是隱藏變量,但攻擊者也是可以在本地修改遠(yuǎn)程提交的,所以我們?cè)诜胚M(jìn)select之前需要檢查類型。
$blogsql = "Select * FROM $comment_table Where blogid=$blogid"
$blogresult = mysql_db_query($dbname, $blogsql);
$blog = mysql_fetch_array($blogresult);
if(strlen($name) == strlen($blog[name]) && strlen($content) == strlen($blog[content])){
//查詢數(shù)據(jù)庫(kù)的兩個(gè)字段的長(zhǎng)度,因?yàn)槊珠L(zhǎng)度可能相同,但兩個(gè)都相同正常情況下出現(xiàn)的幾率就相當(dāng)小了,所以用&&同時(shí)判斷。
error(“你欲提交的內(nèi)容評(píng)論里已存在,請(qǐng)返回<br>”);
}
//下面就開始判斷時(shí)間間隔。更詳細(xì)的說明請(qǐng)看文章后面內(nèi)容。
session_start();
if(session_is_registered("time") && time()-$_SESSION['time']<60*2){ error(“對(duì)不起,你兩次提交的時(shí)間間隔還不到2分鐘<br>”);
} else {
$sql="Insert INTO $comment_table(date,name,content,blogid) VALUES('$date','$name','$content','$blogid')"
mysql_db_query($dbname,$sql);
mysql_close();
$time=time();
session_register("time");
succeed(“評(píng)論提交成功<br>”);
}}
//結(jié)束非空的判斷
error(“你沒有填寫完所有表單<br>”);
?>
上面是一個(gè)記錄評(píng)論數(shù)據(jù)的文件。表單如下:
復(fù)制代碼 代碼如下:
<form action="savecomment.php" method="POST">
<input type="hidden" name="blogid" value="<?=$row[blogid]?>">
您的名字:<input name="name" type="text" size="20" maxlength="100">
評(píng)論內(nèi)容:<textarea name="content" cols="60" rows="8"></textarea>
<input type="submit" name="Submit" value="提交"></form>
您可能感興趣的文章:
- PHP魔術(shù)引號(hào)所帶來的安全問題分析
- PHP開發(fā)中常見的安全問題詳解和解決方法(如Sql注入、CSRF、Xss、CC等)
- 基于PHP開發(fā)中的安全防范知識(shí)詳解
- php安全開發(fā) 添加隨機(jī)字符串驗(yàn)證,防止偽造跨站請(qǐng)求
- 簡(jiǎn)單的方法讓你的后臺(tái)登錄更加安全(php中加session驗(yàn)證)
- php中安全模式safe_mode配置教程
- PHP安全性漫談
- 理解php Hash函數(shù),增強(qiáng)密碼安全
- PHP防注入安全代碼
- php.ini 啟用disable_functions提高安全
- 淺談php安全性需要注意的幾點(diǎn)事項(xiàng)
相關(guān)文章
自寫的利用PDO對(duì)mysql數(shù)據(jù)庫(kù)增刪改查操作類
這篇文章主要給大家介紹了關(guān)于自寫的利用PDO對(duì)mysql數(shù)據(jù)庫(kù)的增刪改查操作類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02連接到txt文本的超鏈接,不直接打開而是點(diǎn)擊后下載的處理方法
默認(rèn)情況下瀏覽器Mime類型設(shè)定中會(huì)直接打開txt文本,但是如果想做到直接下載需要對(duì)Mime進(jìn)行設(shè)置。2009-07-07PHP 使用Echarts生成數(shù)據(jù)統(tǒng)計(jì)報(bào)表的實(shí)現(xiàn)代碼
這篇文章主要介紹了PHP 使用Echarts生成數(shù)據(jù)統(tǒng)計(jì)報(bào)表的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-01-01PHP實(shí)現(xiàn)取得HTTP請(qǐng)求的原文
這篇文章主要介紹了PHP實(shí)現(xiàn)取得HTTP請(qǐng)求的原文,需要的朋友可以參考下2014-08-08php獲取微信基礎(chǔ)接口憑證Access_token
這篇文章主要為大家詳細(xì)介紹了php獲取微信基礎(chǔ)接口憑證Access_token,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08利用discuz實(shí)現(xiàn)PHP大文件上傳應(yīng)用實(shí)例代碼
論壇的附件功能當(dāng)初設(shè)計(jì)的初衷并不是為了文件管理,由于服務(wù)器配置,php,網(wǎng)絡(luò)等多方面因素,使得通過論壇上傳文件并不是一個(gè)好方案。2008-11-11php下獲取http狀態(tài)的實(shí)現(xiàn)代碼
在項(xiàng)目開發(fā)中,有時(shí)我們需要知道遠(yuǎn)程的URL地址是否能訪問正常,判斷其正常與否后進(jìn)行下一步的操作,那么在PHP中如何獲取遠(yuǎn)程HTTP的狀態(tài)呢2014-05-05