2013-07-31 34 views
0

我有一個簡單的形式與textarea,當提交更新我的數據庫中的行!我希望我的用戶能夠輸入單引號,但由於某種原因沒有得到解析! 這是我有我的分析文件..單引號不解析

<?php 
$sql = "SELECT * FROM testimonials WHERE id='$pid'"; 

     $pid = $_POST['pid']; 
     $testtitle = htmlentities($_POST['ts_tt']); 
     $testbody = htmlentities($_POST['ts_tb']); 
     $compowner = htmlentities($_POST['ts_co']); 
     $ownertitle = htmlentities($_POST['ts_ot']); 
     $compname = htmlentities($_POST['ts_cn']); 
     $compwebsite = htmlentities($_POST['ts_cw']); 

     include_once "../php_includes/db_conx.php"; 

     $sql = "UPDATE testimonials SET testtitle='$testtitle', testbody='$testbody', compowner='$compowner', ownertitle='$ownertitle', compname='$compname', compwebsite='$compwebsite' WHERE id='$pid'"; 

     if (!mysql_query($sql, $connection)){ 
      die('Error: ' . mysql_error()); 
    } 
    echo 'Testimonial has been Edited successfully. <br /><br /><a href="admin/">Click Here</a>'; 
    exit(); 
?> 

任何想法一切! 非常感謝 - 菲利普

+2

使用'addslashes'。 –

+2

停止使用mysql_函數,使用mysqli的pdo – Tdelang

回答

2

使用

addslashes 

提供PHP。這逃避了特殊字符。

+3

如果他們必須使用mysql_函數,他們實際上應該使用mysql_real_escape_string – Orangepill

2

使用mysql_real_escape_string($ textareadata)查詢...這將工作...

2

首先,如果你的環境允許,你應該從mysql_職能離婚自己。它們是deprecated,並且在下一個PHP版本中將不可用。您應該切換到PDOmysqli

Here是爲什麼你不應該使用mysql_ *函數的更多信息。其次,您正在接受用戶輸入,而不是將其轉義以安全地插入到數據庫中。在這種情況下,它只是導致你的查詢失敗,但如果有人在哪裏有一點技術知道他們如何可以做任何事情來擦除或更改數據庫中的數據。這被稱爲SQL注入,並且是網站遭到黑客攻擊的更常見方式之一。

有兩點你的腳本可以使用一點更謹慎的治療。第一個是這個。

$sql = "SELECT * FROM testimonials WHERE id='$pid'"; 

應該

$sql = "SELECT * FROM testimonials WHERE id='".mysql_real_escape_string($pid)."'"; 

二是

$sql = "UPDATE testimonials SET testtitle='$testtitle', testbody='$testbody', compowner='$compowner', ownertitle='$ownertitle', compname='$compname', compwebsite='$compwebsite' WHERE id='$pid'"; 

$sql = "UPDATE testimonials SET testtitle='".mysql_real_escape_string($testtitle)."', testbody='".mysql_real_escape_string($testbody)."', compowner='".mysql_real_escape_string($compowner)."', ownertitle='".mysql_real_escape_string($ownertitle)."', compname='".mysql_real_escape_string($compname)."', compwebsite='".mysql_real_escape_string($compwebsite)."' WHERE id='".mysql_real_escape_string($pid)."'"; 

注意,你可能還會發現,你必須移動數據庫連接包括在你的第一個調用mysql_real_escape_string。

要更詳細地描述此漏洞利用可能發生的情況,假設您從文本字段獲取pid,請將第一個查詢作爲假設。

$sql = "SELECT * FROM testimonials WHERE id='$pid'"; 

我是一個邪惡的黑客可以簡單地鍵入

0'; update testimonials set testbody = '<script>window.location.href="http://www.compeditors-website.com";</script>'; 

什麼會被髮送到你的數據庫。

SELECT * FROM testimonials WHERE id='0'; update testimonials set testbody = '<script>window.location.href="http://www.competitors-website.com";</script>'; 

現在,當任何人進入您的推薦頁面時,他們將被重定向到您的競爭對手網站。