我想提出一個文件系統,用戶只能將指明文件和不應該上傳,只是使用javascript和輸入文件類型捕獲文件名。
問題是,當我把它執行查詢插入...該文件的路徑是這樣的:
C:\用戶\文件\ test.php的
問題這裏是\字符,因爲它省略了PHP中的下一個字符。所以它保存爲:C:usersfilestest.php在數據庫中。
我還有一個輸入框,用戶特異性,他們想要的文件...所以磨片他們寫道:
C:\查詢不執行,因爲\字符。
有什麼想法?
我想提出一個文件系統,用戶只能將指明文件和不應該上傳,只是使用javascript和輸入文件類型捕獲文件名。
問題是,當我把它執行查詢插入...該文件的路徑是這樣的:
C:\用戶\文件\ test.php的
問題這裏是\字符,因爲它省略了PHP中的下一個字符。所以它保存爲:C:usersfilestest.php在數據庫中。
我還有一個輸入框,用戶特異性,他們想要的文件...所以磨片他們寫道:
C:\查詢不執行,因爲\字符。
有什麼想法?
您可以使用\\
儘管單\
太棒了,所以你推薦str_replace到所有\\到/然後當顯示替換回來? – user1812695
沒有時,你會獲取它,它將是單\ \只,因爲雙只用於保存只。 –
但問題是我不能保存到數據庫,因此插入完成後字符會丟失。 – user1812695
如果你正確地逃脫你想插入字符串,你不會有與\
消失的問題。實際上MySQL是將單個反斜線視爲轉義字符串。
因此,像這樣:
$path_string_escaped = mysqli_real_escape_string($db_connection, $path_string);
並使用您的插入$path_string_escaped
。
注意,這與讓$path_string_escaped
看起來像C:\\users\\files\\test.php
。然後,MySQL將使用反斜槓將C:\users\files\test.php
寫入數據庫。從數據庫讀取以修改字符串時,不需要執行任何操作。
你始終應該逃避用戶提供的或用戶可訪問的數據,你會被寫入到數據庫中。
這也是一個很好的例子,爲什麼,即使使用準備好的語句,你還是應該逃避用戶可訪問的數據,當你用繩子交易可能包含MySQL的轉義序列你正在寫爲DB。雖然使用預準備語句可以防止實際的注入攻擊,但是當字符串中已經存在MySQL轉義序列時,它無法按照打算的方式實際將數據寫入數據庫。
你描述的是SQL注入的一個低級別的形式。防止它,因爲這標誌着**一個嚴重的問題**你有:?防止SQL注入的最佳方式(http://stackoverflow.com/q/60174/367456) – hakre
謝謝你,這是一個系統在公司內部使用(內聯網)它不會公開。但我會看看這個帖子來增加安全性。感謝 – user1812695
@ user1812695 - 它沒關係,它不公開。員工可能會不滿。他們可能受到基於社會工程學的攻擊(只需將其粘貼到您的地址欄中!)。他們可以犯錯誤。他們可以輸入包含特殊字符的完美數據,並導致SQL中斷。 – Quentin