我試圖調試一個問題(不是我自己的代碼)與字符串越來越逃脫,並重新重新逃脫重複項目被重新保存。Typo3 v4.5.30自動轉義字符串?
該代碼使用了mysql_real_escape_string,但即使關閉了魔術引號,當我的動作被調用時,引用變量已經被引用,因此對mysql_real_escape_string的調用將雙引號引起來。然後每次該項目被重新安排越來越多的斜線堆積起來。
因此,我需要確保該項目在轉到數據庫之前轉義(一次),但在頁面上顯示時未轉義。
我的行動開始,像這樣:
public function adminAction() {
$prizes = $_POST['tx_xxx_bingofrontend']['prize'];
//at this point my prize[] elements are already quoted, why?
foreach ($prizes as $key => $prize) {
foreach ($prize as $field => $value) {
// echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF");
// echo strip_tags($value) ;die;
// OFF gets printed
$cleanedValues[$field] = mysql_real_escape_string(strip_tags($value));
}
.... more code
我使用TYPO3 v4.5.30,有沒有電話並在逃跑前我的動作代碼火災的地方做了一個TYPO3設置或可能的擴展API調用?
如何確保字符串正確顯示並正確重新保存?
謝謝!
更新: 我現在有這樣的代碼:
public function adminAction() {
$postsvars = t3lib_div::_POST();
$prizes = $postsvars['tx_xxx_xxfrontend']['prize'];
foreach ($prizes as $key => $prize) {
foreach ($prize as $field => $value) {
//echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF");
// echo strip_tags($value) ;die;
$cleanedValues[$field] = $GLOBALS['TYPO3_DB']->quoteStr(strip_tags($value),'tx_xxx_domain_model_prize');
其更新之前各之前運行,並創建和它正確地添加斜線(我不知道它是如何使用我的tablename在呼叫,但它似乎工作很好)。但是,當我讀到的東西,並取下斜線顯示,像這樣在我的模型:
public function UnEscapePrize(){
$this->setTitle(stripslashes($this->getTitle()));
..... other vars get un-escaped
}
去除斜線被保存到這是不是我想要的數據庫。我只是想刪除它們的視圖。我該怎麼做?
更新2: 還是我擔心什麼都沒有?是typo3 4.5.3/extbase 1.3在使用默認更新和添加方法時容易受到sql注入攻擊?如果它使用字符串concat拼湊sql,那麼它可能是,但如果它使用準備好的語句它不是。我來自一個仍然使用了很多字符串concat sql的地方,所以這個擔心對我來說只是第二性質。
這真的是一個基於extbase的擴展嗎?擴展可以基於extbase,基於pi_base或pur PHP代碼。我希望你的擴展擴展pi_base。如果你使用f.e. exec_INSERTquery mysql_real_escape_string被自動處理。 – maholtz