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

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

htmlSpecialchars和MySQL_REARY_EXECH_String是否保證PHP代碼

htmlSpecialchars和MySQL_REARY_EXECH_String是否保證PHP代碼

慕尼黑的夜晚無繁華 2019-06-20 16:27:20
htmlSpecialchars和MySQL_REARY_EXECH_String是否保證PHP代碼不受注入的影響?今天早些時候有人問了一個關于Web應用中的輸入驗證策略.在撰寫本報告時,最上面的答案是PHP只是使用htmlspecialchars和mysql_real_escape_string.我的問題是:這是否總是足夠的?我們還需要知道更多嗎?這些功能在哪里分解?
查看完整描述

3 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

除了Cheekysoft的出色回答:

  • 是的,它們會保護你的安全,但前提是它們的使用是絕對正確的。如果不正確地使用它們,您將仍然容易受到攻擊,并且可能會出現其他問題(例如,數據損壞)。
  • 請改用參數化查詢(如上文所述)。您可以通過例如PDO或PEARDB之類的包裝器使用它們。
  • 確保魔術_引號_gpc和魔術_引號_運行時在任何時候都是關閉的,并且不會意外地打開,甚至不會被短暫地打開。這些都是PHP開發人員為防止安全問題(破壞數據)而進行的一次早期和嚴重錯誤的嘗試。

在防止HTML注入(例如跨站點腳本)方面并沒有真正的靈丹妙藥,但如果您使用庫或模板系統輸出HTML,則可以更容易地實現它。閱讀相關文檔,以了解如何恰當地逃避事物。

在HTML中,需要根據上下文進行不同的轉義。對于放入Javascript中的字符串尤其如此。


查看完整回答
反對 回復 2019-06-20
?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

我絕對同意上述的說法,但我想補充一件事,以回應Cheekysoft的答覆,特別是:

當涉及到數據庫查詢時,始終嘗試并使用準備好的參數化查詢。mysqli和PDO庫支持這一點。這比使用轉義函數(如MySQL_REAL_EXECH_String)安全得多。

是的,MySQL_REARY_EXIFE_String實際上只是一個字符串轉義函數。這不是一顆神奇的子彈。它所要做的就是轉義危險字符,以便它們可以安全地在單個查詢字符串中使用。但是,如果您不事先清理您的輸入,那么您將容易受到某些攻擊向量的攻擊。

想象一下下面的SQL:

$Response=“從表中選擇字段id=”.mysql_Real_EXECH_String($_POST[‘id’]);

您應該能夠看到這很容易被利用。假設id參數包含公共攻擊向量:

1或1=1

沒有危險的字符在那里編碼,所以它將直接通過轉義過濾器。離開我們:

從表中選擇字段,其中id=1或1=1

我編寫了一個快速的小函數,放在我的數據庫類中,它將剔除任何不是數字的東西。它使用PREG_REPLE,所以有一個更優化的函數,但它在緊要關頭工作.

function Numbers($input) {
  $input = preg_replace("/[^0-9]/","", $input);
  if($input == '') $input = 0;
  return $input;}

所以不要用

$Resue=“從表中選擇字段,其中id=”.mysqlrealfreestring(“1 or 1=1”);

我會用

$READ=“從表中選擇字段,其中id=”.Numbers(“1 or 1=1”);

它將安全地運行查詢。

從表中選擇字段,其中id=111

當然,這只是阻止了它顯示正確的行,但我認為這對試圖將SQL注入到您的站點的人來說不是什么大問題;)


查看完整回答
反對 回復 2019-06-20
  • 3 回答
  • 0 關注
  • 768 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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