我正在尝试调试一个问题(不是我自己的代码),当项目被重新保存时,字符串被反复转义和重新转义。
该代码使用 mysql_real_escape_string 但即使关闭了魔术引号,在调用我的操作时已经引用了 post 变量,因此对 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' );
它在每次更新和创建之前运行,并正确添加斜杠(我不确定它如何在调用中使用我的表名,但它似乎工作得很好)。但是当我阅读内容并删除斜线以在我的模型中显示时:
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 的地方,所以这种担心对我来说只是第二天性。