我有問題。我有一個PHP腳本(PHP 5),它將URL參數$_GET['file']
保存到變量$file
。現在有辦法檢查這個變量是否是一個有效的文件名(例如:hello.txt
而不是/../otherdir/secret.txt
)。因爲沒有檢查$ file變量,黑客就可以使用/../
來到我的父文件夾。檢查字符串是否有效文件名
回答
您可以在PHP的basename
功能看,它會與文件名返回,見下面的例子:
$file = '../../abc.txt';
echo basename($file); //output: abc.txt
注:basename
讓你從路徑字符串的文件名,不論文件的實際存在與否。可以使用file_exists
函數來驗證文件物理存在。
非常感謝! <3 – askerno
作爲一個方面說明,這並不真正檢查文件名是否爲「有效」。它只是簡單地刪除最後一個PHP目錄分隔符。我明白OP的意圖是要做到這一點。但其他人可能會認爲這證實了一些事情 - 事實並非如此。 –
會這樣嗎? http://php.net/manual/en/function.file-exists.php E.g,你的情況,
if(file_exists(str_replace("../", "", $file))){
// valid
}
else{
// invalid
}
文件可以在子文件夾,但不是在父文件夾。
但是,如果你在文件名有興趣,
if(file_exists(pathinfo($file, PATHINFO_BASENAME))){
// valid
}
else{
// invalid
}
應該工作。
之前的所有內容即可正常工作,但我認爲kamal pal的版本更加緊湊,我不想轉到子文件夾..但是也要感謝您<3 – askerno
我會想結合卡邁勒朋友的和Pancake_M0nster的回答創建簡單:
if(file_exists(basename($file))){
// valid
}
else{
// invalid
}
結合兩種不同的解決方案並不總是提供更好或更有效的答案。有時候,它甚至會破壞功能:在這種情況下,只有'$ file'與主腳本位於同一目錄時,結果纔會是「真」。 –
- 1. 檢查字符串是否有效
- 2. 檢查文件名是否有效
- 3. 檢查UTF16字符串中的所有字符是否有效?
- 4. 檢查字符串是否有有效的數字
- 5. 檢查字符串是否有數字
- 6. 檢查替換字符串是有效
- 7. Laravel檢查字符串是否是有效的時間戳字符串
- 8. 如何檢查查詢字符串中的ID是否有效?
- 9. 如何檢查是否字符串是有效的HTML格式
- 10. 檢查字符串是否是語法有效的句子?
- 11. 如何檢查字符串是否是有效的HTTP URL?
- 12. 檢查一個字符串是否是一個有效的URI
- 13. Java的檢查,如果字符串是有效的文件
- 14. 函數檢查字符串是否有
- 15. 如何檢查是否字符串有
- 16. 檢查數組是否有字符串?
- 17. 檢查字符串是否有空格
- 18. 檢查字符串是否爲迴文
- 19. 檢查文件名是否有效窗口名稱
- 20. 有效檢查一個字符串是否包含另一個字符串
- 21. 檢查一個txt文件中是否有新字符串
- 22. 檢查字符值是否爲有效的R對象名稱
- 23. 檢查Localizable.strings文件是否有效
- 24. 如何檢查字符串是否有效YAML?
- 25. 檢查javascript字符串是否有效UTF-8
- 26. Jsoup檢查字符串是否有效HTML
- 27. 檢查字符串是否包含有效的Python代碼
- 28. 如何檢查給定的字符串是否有效月份?
- 29. 如何檢查json字符串是否有效?
- 30. 檢查JSONPath字符串是否在C#中有效
您是否嘗試過的東西?或寫了一些僞代碼?或做了一些研究? – Rizier123
只需刪除'/' – adeneo