我剛剛從$ _post和$ _get獲得了「preSecure」所有用戶輸入數據的想法。但我想知道這是否是一種好的做法,並希望對此有所投入。這是我想出的:保護所有帖子,並在框架中獲取數據php
function clean_str($str){
return preg_replace('#[^a-z_ [email protected]]#i', '', $str);
}
if ($_POST){
foreach ($_POST AS $key => $val){
$_POST[$key] = clean_str($val);
}
}
if ($_GET){
foreach ($_GET AS $key => $val){
$_GET[$key] = clean_str($val);
}
}
這段代碼只會在每個http請求的開始處運行。 clean_str函數可以開發爲允許其他字符和替換字符等(這只是一個例子)。但我認爲第一個目標是簡單地防止sql注入。我現在看到的唯一不好的事情就是如果你的「插件」需要從用戶輸入發送sql命令。上面的討論可以包裹在一個函數中,如果需要的話可以調用。 Post和Get是全局變量,所以這不會成爲問題。
我實際上正在編寫我自己的框架(還有很多工作),如果我能完成它,我將發佈。問題是我經常看到新手開發人員在數據庫查詢中添加$ _POST ['userinput']。上面的代碼應該可以做到這一點。那麼這是我要做的一些背景,爲什麼我要提出這個問題。
我會很高興聽到你的想法。這可能不是堆棧溢出的最佳問題,我想我想打開更多討論這種方法來分享想法和意見。但爲了提出我的問題,這將符合以下情況:是否有其他方法比這更快或更具可擴展性,或者是否等於此,或者另一種功能是否可以補充此方法?這種做法是否良好?覆蓋post的全局變量並獲取上面的數據可以嗎?
我知道上面的代碼不是面向對象的,但它是關於在對它們執行檢查之前自動清理用戶輸入數據的方法。我認爲這將節省很多代碼和頭痛。
請與我分享您的想法。由於Stack Overflow的評論僅限於此,如果您在此表中引入新的想法,如果您答覆爲答案,我將不勝感激。評論是對這種情況下的具體想法/回答發表評論。
如果您希望Thomas O'Leary先生在表單中輸入他的名字或輸入網址 –
我從來沒有見過這一點。你需要知道你期待的數據。如果排除幾乎任何東西,很難在SO上發佈代碼。 – AbraCadaver
取決於您如何使您的clean_str功能。你可以在該函數中使用mysql_real_escape_string,而且你也可以使用它。 – Medda86