亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

防止PHP中的SQL注入攻擊

防止PHP中的SQL注入攻擊

PHP
小唯快跑啊 2022-12-30 16:00:19
我想防止對這段 PHP 代碼的 SQL 攻擊(這只是課堂練習)。這可以很容易地通過設置@mail等于類似的東西來利用'); DROP TABLE PURCHASE; --$db = new SQLite3 ($db_name);$sql = sprintf ("INSERT INTO PURCHASE (quantity, name, password, mail)                  VALUES ('%s', '%s', '%s', '%s')\n",                 $Quantity, $Name, $Password, $Mail );echo $sql;if (!$db->exec ($sql)) {    throw new Exception($db->lastErrorMsg());}我試圖通過傳遞這樣的參數來防止這種情況發生,但我得到了500 Internal Server Error$db = new SQLite3 ($db_name);$sql = $db->prepare("INSERT INTO PURCHASE(quantity, name, password, mail)            VALUES (:Quantity, :Name, :Password, :Mail)");$sql->bindValue(':Quantity', $Quantity, SQLITE3_TEXT);$sql->bindValue(':Name', $Name, SQLITE3_TEXT);$sql->bindValue(':Password', $Password, SQLITE3_TEXT);$sql->bindValue(':Mail', $Mail, SQLITE3_TEXT);echo $sql;if (!$db->exec ($sql)) {    throw new Exception($db->lastErrorMsg());}我怎樣才能解決這個問題?
查看完整描述

1 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

SQLite3::exec用于執行查詢字符串,而不是準備好的語句。您需要改為使用SQLite3Stmt::execute。改變:

if (!$db->exec ($sql)) {

    throw new Exception($db->lastErrorMsg());

}


if (!$sql->execute()) {

    throw new Exception($db->lastErrorMsg());

}

請注意你不能echo $sql,因為它是一個對象,而不是一個簡單的類型。如果您想查看SQLite3Stmt對象的外觀,則需要print_r($sql)或var_dump($sql)。


查看完整回答
反對 回復 2022-12-30
  • 1 回答
  • 0 關注
  • 83 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號