2014-01-08 60 views
0

我試圖爲過去的日子裏做保護,我試過很多功能,如允許HTML但是從mysqli的注射

用strip_tags,mysqli_real_escape_string,..等

// Prevent MySQL Injection Attacks 
function cleanQuery($connector,$string){ 
    if(get_magic_quotes_gpc()) // prevents duplicate backslashes 
     $string = stripslashes($string); 
    return mysqli_escape_string($connector,$string); 
} 

但沒有人給我我想要的結果。

我想要的是輸入文章文本,允許html編輯,但防止從mysqli注射...任何人都可以幫忙嗎?

爲例: 我有這樣的:數據的

$data  = $_POST['data']; 


echo "<form method='POST' action='index.php?do=check'> 
<textarea rows='10' name='data' cols='50'>$data</textarea> 
<input type='submit' value='send' name='B1'> 
</form> 
    "; 



mysqli_query($conn,"insert into table(field)values('$data')"); 

值爲:

<p align="center"><b><font size="6">test</font></b></p> 
<table border='1' width='100%'> 
    <tr> 
     <td>&nbsp;what's your name ?</td> 
     <td>&nbsp;my name is `Jhone`</td> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td>&nbsp;</td> 
     <td>&nbsp;</td> 
    </tr> 
</table> 

一個HTML輸入

那麼,如何可以插入到數據庫沒有問題 ?如果您使用的mysqli

// Prevent MySQL Injection Attacks 
function cleanQuery($connector,$string){ 
    return $connector->real_escape_string($string); 
} 

這個代碼將制定出完美的你:

+3

myslqi準備的語句將給你所有必要的保護 – user4035

+1

使用準備好的語句 – Junior

+2

你想使用準備好的語句。 http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php –

回答

1

問題通過prepare解決作爲你們說, 花時間,因爲我想工作,但它的工作原理的伎倆..感謝所有

用於選擇和執行:

$stmt = $connector->prepare('select * from TABLENAME where FIELD1 = ? and FIELD2 = ?'); 
$stmt->bind_param('ss', $FIELD1_VALUE,$FIELD2_VALUE); 

$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_assoc()) { 
    // do something with $row 
} 

$stmt->close(); 

IN第1行:更改要插入值的位置 IN 2:每個,把s和增加值如上所示。

和插入:

$stmt = $connector->prepare('insert into TABLE(FIELD1,FIELD2,FIELD3)values(?,?,?)'); 
$stmt->bind_param('sss', $FIELD1_VALUE,$FIELD2_VALUE,$FIELD3_VALUE); 

if ($stmt->execute()){ 
echo "data added "; 

}else{ 

echo "Error adding data ".$stmt->error ; 
} 

$stmt->close(); 

規則同樣適用

希望幫助! Regards,

+0

你可以請你在你的答案分享你的改進代碼,讓別人可以從中學習? –

+0

@MarcelKorpel,ans。更新。 – Hussein

-1

的MySQLi ......試試這個代碼。

+0

什麼是'addslashesh'?你的意思是'addslashes' ;-) –

+0

哦,上帝,爲什麼!爲什麼在real_escape_String之後添加addslashes()? –

+0

不,不,不要使用'addslashes'!除此之外,代碼與OP的代碼相同。 –