2013-07-07 51 views
1

我有一個消毒問題。在AppController中,我使用了Sanitization實用程序,但它不起作用。當我想打電話給我的更新時,由於'斜槓在我的輸入文本中失敗。我正在使用CakePHP 2.3.6。CakePHP:更新時的數據清理

function beforeFilter(){ 
    if(!empty($this->data)){ 
     App::uses('Sanitize', 'Utility'); 
     $this->request->data = Sanitize::clean($this->data, array('remove_html'=>true,'encode'=>false,'unicode'=>false,'backslash'=>true, 'escape'=>false)); 
    } 
} 

控制器代碼:

$this->ClientProfile->updateAll(
    array('ClientProfile.location'=>"'".$this->User->data['ClientProfile']['location']."'"), 
    array('ClientProfile.user_id'=>$userdata['id']) 
); 

任何想法?

+0

與您的代碼非常混淆。當你清理'$ this-> request-> data'數組時(爲什麼你會使用'$ this-> User-> data [etc]'(你甚至會在哪裏得到一個'$ this-> User-> data'? )? 2)不需要在beforefilter中放入'App :: uses',將其聲明在最前面,這些實用程序將被延遲加載。 – Nunser

+0

我強烈建議不要在保存時應用任何衛生設施。規則是:「單獨輸入輸出,轉義輸出」。因此,只需使用'h()'作爲文檔逃避輸出(另請參閱新註釋@ http://book.cakephp.org/2.0/en/core-utility-libraries/sanitize.html#Sanitize::html)和你會好起來的。 – mark

+0

請檢查我的答案。如果有用,請將答案設置爲已接受或投票。否則,請寫下答案中缺少的內容,或者您​​現在處理的問題是什麼,我會盡力提供幫助。 –

回答

0

嘗試使用Sanitize :: escape()而不是Sanitize :: clean()。因爲它是寫在the documentation

消毒::越獄()

使字符串SQL安全。

您也可以將數據清理直接移動到updateAll()方法調用。通過這樣做,您將知道updateAll()方法將獲得清理過的數據,而不管腳本其他部分中的數據發生了什麼。