第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

何時(以及為什么何時)以及我應(yīng)該如何在 php 中清理來自 POST JSON 的數(shù)據(jù)

何時(以及為什么何時)以及我應(yīng)該如何在 php 中清理來自 POST JSON 的數(shù)據(jù)

PHP
呼喚遠(yuǎn)方 2022-01-08 17:41:20
在過去的幾天里,我閱讀了很多關(guān)于使用 PHP 對輸入和輸出數(shù)據(jù)進(jìn)行清理以防止(最突出)XSS 和 SQL 注入的資源,以及關(guān)于 SO 的一堆問題。然而,在這一點(diǎn)上,我覺得我對我應(yīng)該做什么和不應(yīng)該做什么感到更加困惑和不安全,部分原因是一些相反的信息,例如我讀過很多次我沒有讀過mysqli_real_escape_string如果我使用準(zhǔn)備好的語句,則需要使用或任何其他形式的輸入凈化,其他消息來源說我無論如何都應(yīng)該使用它,甚至應(yīng)該像這樣凈化它;蘋果的這個頁面相當(dāng)粗略地(?)討論了這個話題;等等。因此,我真的很感激我應(yīng)該做的一些澄清 - 最好但不一定,由在該領(lǐng)域(服務(wù)器端安全)有一些經(jīng)驗(yàn)的人,例如在這個領(lǐng)域工作,已經(jīng)完成了對此進(jìn)行了大量研究,甚至可能站在攻擊者的一邊(?)。為了更好地了解我的情況,我將盡可能簡潔地回顧一下:我目前正在使用 Swift (iOS) 編寫應(yīng)用程序,并且需要將一些數(shù)據(jù)發(fā)送到我的服務(wù)器,并使用 SQL 將其保存在表中,并且可以被其他用戶檢索(例如博客)。為此,我通過 POST 將編碼為 JSON 的數(shù)據(jù)發(fā)送到我的服務(wù)器(“myphp.php”;使用 Alamofire,不過這應(yīng)該不是很重要)并在那里對其進(jìn)行解碼。這是我不確定是否應(yīng)該以某種方式清理我的數(shù)據(jù)的第一個地方(參考我上面鏈接的問題)。無論如何,然后我繼續(xù)使用準(zhǔn)備好的語句將它插入到表中(MySQL,所以沒有任何模擬)。此外,我還希望我輸出的數(shù)據(jù)可以在 html 中使用,或者更確切地說,整個 PHP 也可以用于 AJAX。這是我的意思的一個例子:// SWIFT// set parameters for requestlet parameters: Parameters = [    “key”: “value”,    ...]// request with json encoded parametersAlamofire.request(“myphp.php”, method: .post, parameters: parameters, encoding: JSONEncoding.default).validate().responseJSON(completionHandler: { (response) in// do things with data (e.g. show blog post)// PHPheader('Content-Type: application/json');$decodedPost = json_decode(file_get_contents('php://input'), true);// what to do with input...?// PREPARED STATEMENTS: insert, select, etc.// what to do with output...?// echo response - json-encoded so that// json completion handler in swift can work with it echo json_encode($output, JSON_NUMERIC_CHECK);我已經(jīng)向一位朋友征求了一些建議,他告訴我他總是做以下事情(xss_clean()也是他發(fā)給我的一個功能)——無論數(shù)據(jù)是輸入還是輸出:$key = xss_clean(mysqli_real_escape_string($db, trim(htmlspecialchars($data)))); // e.g. $data = decodedPost["key"]然而,不僅我的研究告訴我這可能沒有必要,而且他還告訴我這有其局限性,最明顯的是,當(dāng)數(shù)據(jù)應(yīng)該從服務(wù)器再次檢索并再次顯示給例如另一個用戶時——盡可能接近盡可能使用原始輸入。如您所見,我真的很困惑。我想盡我所能保護(hù)發(fā)送到服務(wù)器的用戶數(shù)據(jù),所以這對我來說是一個非常重要的話題。我希望這個問題不會太寬泛,但許多其他問題,就像我說的那樣,至少部分是矛盾的或非常古老的,例如仍然使用簡單的mysql擴(kuò)展并且沒有準(zhǔn)備好的陳述。如果您需要更多信息,請隨時詢問。非常感謝參考官方文檔(以支持答案)。謝謝!
查看完整描述

1 回答

?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個贊

輸入清理是一個誤導(dǎo)性術(shù)語,表示您可以對所有數(shù)據(jù)揮動魔杖并將其設(shè)為“安全數(shù)據(jù)”。問題是當(dāng)數(shù)據(jù)被不同的軟件解釋為編碼要求時,“安全”的定義會發(fā)生變化。同樣,“有效”數(shù)據(jù)的概念因上下文而異——您的數(shù)據(jù)很可能需要特殊字符('、、&、<)——請注意,SO 允許所有這些作為數(shù)據(jù)。

可以安全嵌入到 SQL 查詢中的輸出可能不安全地嵌入到 HTML 中。或斯威夫特。或 JSON。或外殼命令?;?CSV。并且剝離(或徹底拒絕)值以便它們可以安全地嵌入所有這些上下文(以及許多其他上下文)中,限制性太強(qiáng)。

那么我們應(yīng)該怎么做呢?確保數(shù)據(jù)永遠(yuǎn)不會造成損害。實(shí)現(xiàn)這一點(diǎn)的最佳方法是首先避免解釋數(shù)據(jù)。參數(shù)化 SQL 查詢就是一個很好的例子;參數(shù)永遠(yuǎn)不會被解釋為 SQL,它們只是作為數(shù)據(jù)放入數(shù)據(jù)庫中。

相同的數(shù)據(jù)可用于其他其他格式,例如 HTML。在這種情況下,數(shù)據(jù)應(yīng)在嵌入時針對該特定語言進(jìn)行編碼/轉(zhuǎn)義。因此,為了防止 XSS,數(shù)據(jù)在被放入輸出時應(yīng)該是 HTML 轉(zhuǎn)義(或 javascript 或 URL 轉(zhuǎn)義)。不是在輸入時。這同樣適用于其他嵌入情況。

那么,我們應(yīng)該直接將我們得到的任何東西傳遞給數(shù)據(jù)庫嗎?

不 - 您肯定可以檢查有關(guān)用戶輸入的內(nèi)容,但這高度依賴于上下文。讓我們稱其為 - 驗(yàn)證。確保這是在服務(wù)器上完成的。一些例子:

  • 如果一個字段應(yīng)該是一個整數(shù),你當(dāng)然可以驗(yàn)證這個字段以確保它包含一個整數(shù)(或者可能是 NULL)。

  • 您通??梢詸z查特定值是否是一組已知值中的一個(白名單驗(yàn)證)

  • 您可以要求大多數(shù)字段具有最小和最大長度。

  • 您通常應(yīng)該驗(yàn)證任何字符串僅包含對其編碼的有效字符(例如,沒有無效的 UTF-8 序列)

如您所見,這些檢查非常依賴于上下文。所有這些都是為了幫助增加您最終獲得有意義數(shù)據(jù)的幾率。它們不應(yīng)該是保護(hù)您的應(yīng)用程序免受惡意輸入(SQL 注入、XSS、命令注入等)的唯一防御,因?yàn)檫@不是這樣做的地方。


查看完整回答
反對 回復(fù) 2022-01-08
  • 1 回答
  • 0 關(guān)注
  • 152 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號