iT邦幫忙

0

如何在 php / apache 關閉 'or''=' 的帳/密登入

  • 分享至 

  • xImage

請問各位高手,若發現在 php/apache可以用'or''=',作為帳號與密碼登入,那我應如何改善此問題 ? 謝謝哭

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
ihon822
iT邦研究生 2 級 ‧ 2011-02-15 16:15:06

google一下 PHP SQL injection

2
ghost234
iT邦新手 4 級 ‧ 2011-02-15 16:44:57

資料隱碼攻擊

又叫插入式攻擊

網頁上最常遇到的一種方法

寫個判斷式去判斷輸入值就好~~
加欄位長度限定

4
player
iT邦大師 1 級 ‧ 2011-02-15 18:27:00

1.在php開啟魔術引號的設定
會自動把傳入參數值做必要的字元替換處理

2.或是自行在組合SQL字串前
自行把變數中的單引號
取代成連續兩個單引號
以符合SQL的字串規範

6
fillano
iT邦超人 1 級 ‧ 2011-02-16 10:05:00

如果你使用的php版本大於5.2,那會有一些好用的東西,可以用來過濾、驗證使用者輸入的資料:
http://www.php.net/manual/en/book.filter.php

另外,我google到一些使用範例:
http://net.tutsplus.com/tutorials/php/sanitize-and-validate-data-with-php-filters/

要顧好網站安全,最初在制定規則的時候就要留心。例如:帳號密碼長度範圍,允許字元等,這樣就可以擋掉一些東西(例如你舉的問題)。

如果是比較舊的版本,還是有一些東西可以用:

  1. 如果資料庫是mysql,那資料存入之前可以先用mysql_real_escape函數先處理過,他會正確跳脫符號,避免產生問題(比較起來,magic quote沒那麼可靠,而且會增加使用麻煩)
  2. 如果不允許使用者輸入html,以避開XSS攻擊,那可以用htmlspecialchars以及htmlentities來把字串轉成html entities。(例如<會變成<)

另外,利用例如PDO這一類的資料庫抽象層,或是進一步使用ORM(ex. doctrine, propel etc.),都有"prepared statement"功能,利用bind parament動作傳入查詢參數的方式,除了可以重複使用prepared statement,他在內部也會做escape以預防SQL Injection。

總之,一切使用者輸入的資料都要小心,不可信任。(不論是post, get, cookie)即使是css也可以插入javascript,link也可以插入"javascript:"執行程式再跳轉,甚至可以利用動態轉型的規則寫出...看起來像亂碼但是實際可執行的javascript。沒有一個地方是安全的。在瀏覽器端做驗證也並不可靠,充其量只是提供便利。所以,能在伺服器程式端擋掉的東西,就盡量擋掉。

我要發表回答

立即登入回答