:::
Tad Repair 維修通報

更新後變更維修狀態無法輸入回覆

discuss pic 2018-06-05 14:06:46

變更維修狀態時就算輸入回覆內容,一律都會消失

discuss pic 2018-06-05 14:18:49
tad

我試不出您描述的狀況...

discuss pic 2018-06-05 14:28:51

補圖給您囉~麻煩您

discuss pic 2018-06-05 14:34:03
tad

我在我的網站上測試沒這種問題(也沒人反應過)

所以,應該不是程式問題

如果需要協助

請留下相關資訊吧,否則我也幫不上忙。

 

discuss pic 2018-06-05 14:34:55

更新前是沒有該問題的說...

有沒有什麼方向可以去抓問題呢

discuss pic 2018-06-05 14:39:30
tad

我沒辦法通靈...

discuss pic 2018-06-05 14:55:05

找到原因了 我去比對舊版正常的檔案

`fixed_status` = '{$fixed_content}' ,
 `fixed_content` = '{$fixed_content}'

改為

`fixed_status` = '{$_POST['fixed_status']}' ,
 `fixed_content` = '{$_POST['fixed_content']}'

 

問題應該出在變數宣告....名稱相同

 $fixed_content = $myts->addSlashes($_POST['fixed_content']);
 $fixed_content = $myts->addSlashes($_POST['fixed_status']);

 

 

目前正常了

感謝老師

discuss pic 2018-06-05 14:59:16
tad

還真的是bug...

不過這樣改不好,會有漏洞...

改成這樣吧:

//更新處理狀態
function update_tad_fixed($repair_sn = "")
{
    global $xoopsDB, $xoopsUser, $TadUpFiles;

    //取得使用者編號
    $uid = ($xoopsUser) ? $xoopsUser->getVar('uid') : "";

    $myts          = MyTextSanitizer::getInstance();
    $fixed_content = $myts->addSlashes($_POST['fixed_content']);
    $fixed_status  = $myts->addSlashes($_POST['fixed_status']);

    $today = date("Y-m-d H:i:s", xoops_getUserTimestamp(time()));

    $sql = "update `" . $xoopsDB->prefix("tad_repair") . "` set
	 `fixed_uid` = '{$uid}' ,
	 `fixed_date` = '{$today}' ,
	 `fixed_status` = '{$fixed_status}' ,
	 `fixed_content` = '{$fixed_content}'
	where `repair_sn` = '$repair_sn'";
    $xoopsDB->queryF($sql) or web_error($sql);

    $DBV = get_tad_repair($repair_sn);

    $unit_sn = $DBV['unit_sn'];
    $unit    = get_tad_repair_unit($unit_sn);
    $msg     = "";

    $fixed_name = XoopsUser::getUnameFromId($uid, 1);
    if (empty($fixed_name)) {
        $fixed_name = XoopsUser::getUnameFromId($uid, 0);
    }

    $TadUpFiles->set_col('fixed_sn', $repair_sn);
    $TadUpFiles->upload_file('fixed_img', 1280, 550, null, $fixed_content, true);

    $title   = sprintf(_MD_TADREPAIR_MAIL_FIXED_TITLE, $today, $DBV['repair_title']);
    $content = sprintf(_MD_TADREPAIR_MAIL_FIXED_CONTENT, $fixed_name, $today, $DBV['repair_title'], "<a href='" . XOOPS_URL . "/modules/tad_repair/index.php?repair_sn={$repair_sn}'>" . XOOPS_URL . "/modules/tad_repair/index.php?repair_sn={$repair_sn}</a>");

    $msg = SendEmail($DBV['repair_uid'], $title, $content);

    redirect_header("index.php?repair_sn=$repair_sn", 3, $msg);

    return $repair_sn;
}
discuss pic 2018-06-05 15:04:38

好的~感謝老師

請教老師這兩種寫法有什麼差異呢? 為何會有漏洞

抱歉我是自學PHP的新手~

discuss pic 2018-06-05 15:06:19
tad

您的寫法是直接接收表單就送進資料庫

沒經過過濾...

遇到有心人就容易被攻擊

discuss pic 2018-06-05 15:11:37

主要是由這些處理的嗎?

 $myts          = MyTextSanitizer::getInstance();
 $fixed_content = $myts->addSlashes

我Google了一下~這段是要過濾特殊符號的嗎?

discuss pic 2018-06-05 15:23:14
tad

這是XOOPS的過濾工具沒錯

discuss pic 2018-06-06 09:17:58

好的 感謝您

:::

https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_discuss%2Fdiscuss.php%3FDiscussID%3D4690%26g2p%3D1

計數器

今天: 1732173217321732
昨天: 3438343834383438
總計: 7392061739206173920617392061739206173920617392061