2011-08-15 52 views
2

我想弄清楚一種方法來清理從php進入sqlite的輸入。我不能使用mysql。簡單地使用sqlite_escape_string還是需要做其他事情?另外我只能使用sqlite2。如何清理PHP輸入不使用mysql

+0

看看http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php – DrDol

回答

0

SQLite爲此提供了sqlite_escape_string()。不過,它僅適用於PHP 5。

儘管如此,單靠這些方法並不能使您免於注射。一個必要的措施是總是首先驗證用戶提供的輸入,然後再對其進行方法處理,但您必須依賴 - 但實際上尚未創作。

2

避免SQL注入的最好方法是強制使用參數查詢,並且永遠不會通過字符串連接或可變插值手動組裝SQL語句。

在PHP 5+上,您可以使用PDO,這是一個多數據庫抽象層,支持(其中包括)SQLite和參數化查詢。

1

轉義函數確保SQL語言使用的特殊字符(主要是引號)被轉義,以便插入/更新等工作。所有sqlite_escape_string所做的都是轉義單引號。

然後,有人可以制定一個SQL注入的重大關切。因爲你使用的是v2,所以你不能使用保護你的prepare和_bind()函數。

SQLite讓你鏈接命令分隔';'所以這裏有一個問題。我建議你首先使用你編寫的幫助函數或使用sprintf仔細設計你的參數,並確保你正確輸入你的參數,浮點數和字符串。

您應該能夠創建自己的轉義函數,以便「逃避」您想要注意的事情...最具體地說是分號,在查詢結束時使用... ESCAPE'\',假設您將反斜槓用作轉義字符。

然後你有人故意插入惡意內容(XSS)的問題。 Grigor提供了一個解決方案 - 在你的字符串上使用htmlentities()。