你說的只是php代碼中可能會(huì)允許你使用注入語(yǔ)句,但是一般來說,網(wǎng)站防注入都是在鏈接數(shù)據(jù)庫(kù)的類中加入了轉(zhuǎn)換,也就是說把注入語(yǔ)句的關(guān)鍵字都加上了轉(zhuǎn)義字符。比如你遇到的這種情況,就是被防注入了。
創(chuàng)新新互聯(lián),憑借十多年的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),本著真心·誠(chéng)心服務(wù)的企業(yè)理念服務(wù)于成都中小企業(yè)設(shè)計(jì)網(wǎng)站有上1000+案例。做網(wǎng)站建設(shè),選成都創(chuàng)新互聯(lián)。
關(guān)于你這個(gè)問題:
問:輸入框中的SQL語(yǔ)句應(yīng)該如何寫?
條件:數(shù)據(jù)庫(kù)表、字段全已知,輸入框長(zhǎng)度不限。
我只能跟你說,你可以在輸入框中加入;,/這種符號(hào),讓語(yǔ)句解析的時(shí)候出現(xiàn)問題,讓php把sql語(yǔ)句拼合成兩個(gè)或兩個(gè)以上。這樣你就可以在第二條語(yǔ)句之后加入你想要執(zhí)行的命令了。
如果這種方法沒有效果,你只能使用溢出的方式來注入!
這種一般是sql語(yǔ)句的錯(cuò)誤。你將php變量改為值之后將sql語(yǔ)句放到phpmyadmin或其他mysql工具里試一下是否能查到
把來自表單的數(shù)據(jù)插入數(shù)據(jù)庫(kù)
現(xiàn)在,我們創(chuàng)建一個(gè) HTML 表單,這個(gè)表單可把新記錄插入 "Persons" 表。
這是這個(gè) HTML 表單:
html
body
form?action="insert.php"?method="post"
Firstname:?input?type="text"?name="firstname"?/
Lastname:?input?type="text"?name="lastname"?/
Age:?input?type="text"?name="age"?/
input?type="submit"?/
/form
/body
/html
當(dāng)用戶點(diǎn)擊上例中 HTML 表單中的提交按鈕時(shí),表單數(shù)據(jù)被發(fā)送到 "insert.php"。"insert.php" 文件連接數(shù)據(jù)庫(kù),并通過 $_POST 變量從表單取回值。然后,mysql_query() 函數(shù)執(zhí)行 INSERT INTO 語(yǔ)句,一條新的記錄會(huì)添加到數(shù)據(jù)庫(kù)表中。
下面是 "insert.php" 頁(yè)面的代碼:
?php
$con?=?mysql_connect("localhost","peter","abc123");
if?(!$con)
{
die('Could?not?connect:?'?.?mysql_error());
}
mysql_select_db("my_db",?$con);
$sql="INSERT?INTO?Persons?(FirstName,?LastName,?Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";
if?(!mysql_query($sql,$con))
{
die('Error:?'?.?mysql_error());
}
echo?"1?record?added";
mysql_close($con)
?
方法一:
1. yii默認(rèn)的編碼方式是utf-8, 若想改變其編碼方式需要在main.php文件中加上'charset'='GB2312', 這樣才能改變函數(shù)的輸出的編碼方式
2. sql server 2000 的編碼方式默認(rèn)為本地GB2312編碼方式, 對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作時(shí)要注意編碼的方式
3. web頁(yè)面的編碼相應(yīng)的需要變?yōu)镚B2312
4. 文件保存時(shí)需要保存為GB2312編碼,這樣php文件中的中文字符才能正常解析
方法二:
1. 通過iconv函數(shù)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)碼
iconv('GB2312','UTF-8',$data)
SQL文件,你可以這樣導(dǎo)入MySQL中:
首先把SQL文件(假設(shè)名為abc.sql)復(fù)制到MySQL\bin目錄下;
打開命令提示符,轉(zhuǎn)到MySQL\bin的目錄,輸入命令:
mysql -u root -p db_name abc.sql
回車后,要求你輸入密碼。密碼正確后就把數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)中了。
說明:
-u root 表明使用的帳號(hào)為root
-p 有密碼。
db_name abc.sql 將abc.sql導(dǎo)入到數(shù)據(jù)庫(kù)db_name中。
如果這種方法在你的機(jī)子上不適用的話,那就只有試試phpMyAdmin了。
?php
$dbhost = 'localhost:3306'; // mysql服務(wù)器主機(jī)地址
$dbuser = 'root'; // mysql用戶名
$dbpass = '123456'; // mysql用戶名密碼
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('連接失敗: ' . mysqli_error($conn))
;}
echo '連接成功br /'; // 設(shè)置編碼,防止中文亂碼mysqli_query($conn , "set names utf8");
$runoob_title = '學(xué)習(xí) Python';
$runoob_author = 'RUNOOB.COM';
$submission_date = '2016-03-06';
$sql = "INSERT INTO runoob_tbl ".
"(runoob_title,runoob_author, submission_date) ".
"VALUES ".
"('$runoob_title','$runoob_author','$submission_date')";
mysqli_select_db( $conn, 'RUNOOB' );$retval = mysqli_query( $conn, $sql );
if(! $retval ){
die('無法插入數(shù)據(jù): ' . mysqli_error($conn))
;}
echo "數(shù)據(jù)插入成功\n";
mysqli_close($conn);
?
按照步驟開始,多看PHP手冊(cè)。