多學習才能多賺錢之:php安全問題思考

排序的方法多種多樣,通常情況下,我們經常使用到的數組排序函數有:sort()、rsort()、asort()、arsort()、ksort()、krsort()。下面為大家一一詳細介紹。

0=SORT_REGULAR-默認。把每一項按常規順序排列(StandardASCII,不改變類型)

1=SORT_NUMERIC-把每一項作為數字來處理。

2=SORT_STRING-把每一項作為字符串來處理。

3=SORT_LOCALE_STRING-把每一項作為字符串來處理,基於當前區域設置(可通過setlocale()進行更改)。

推薦:【PHP教程】

一、防止SQL注入

什麼是SQL注入攻擊?

所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。

尋找SQL注入的方法:

1.通過get請求

2.通過post請求

3.其他http請求,如cookie

常見的SQL注入問題:

數據庫查詢參數的類型轉換處理

  1. 轉義字符處理不當
  2. Talkischeap,Showmethecode.
  3. 多說無益,代碼亮出來吧!
  4. 測試:
  5. 在下邊的網址後邊加一個單引號,就會報數據庫錯誤
  6. http://testphp.vulnweb.com/ar...
    1. 類型處理不當
    2. Mysql內置了一個命令,可以讀取文件
    3. 該命令會獲取數據庫管理員的密碼。
    4. 處理方法:
    5. 需要將客戶端傳過來的數據進行類型強制轉換,而後再查詢
      1. 查詢語句組織不當
        1. 錯誤處理不當
        2. 即將站點的錯誤信息暴漏給用戶,這樣非常危險。
        3. 數據入庫時將轉換單引號、雙引號、反斜槓為實體
        4. 在入庫的時候如果不過濾'""這樣的東西,這樣會使數據庫報錯,或者注入等問題。
        5. 先將字符串用htmlspecialchars()轉換為實體後存儲到數據庫,然後從數據庫讀出來時htmlspecialchars_decode()轉為HTML標籤。
        6. htmlspecialchars()函數把一些預定義的字符轉換為HTML實體。
        7. 函數原型:
        8. 預定義的字符是:
        9. htmlspecialchars_decode()函數把一些預定義的HTML實體轉換為字符(和htmlspecialchars相反)。
        10. 函數原型:
        11. 二、防止xss攻擊
        12. 什麼是xss攻擊?
        13. 和上邊的sql注入不同的是,xss攻擊是合法的字符串,如經過htmlspecialchars()方法實體化後,可以保存在數據庫中,但是,當訪問含有該字符串的內容頁面時,就會出現問題,如字符串裡邊還有JavaScript,frame代碼,原來的頁面就會被篡改。
        14. 比如你寫個留言本,有人去留言寫<scriptsrc><iframe>,這個被顯出來容易掛病毒都很容易,和數據庫無關。/<iframe>/<scriptsrc>
        15. XSS概念
        16. XSS又稱CSS,全稱CrossSiteScript(跨站腳本攻擊),XSS攻擊類似於SQL注入攻擊,是Web程序中常見的漏洞,XSS屬於被動式且用於客戶端的攻擊方式,所以容易被忽略其危害性。其原理是攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML代碼,當用戶瀏覽該網站時,這段HTML代碼會自動執行,從而達到攻擊的目的。如,盜取用戶Cookie信息、破壞頁面結構、重定向到其它網站等。
        17. 理論上,只要存在能提供輸入的表單並且沒做安全過濾或過濾不徹底,都有可能存在XSS漏洞。
        18. 下面是一些最簡單並且比較常見的惡意字符XSS輸入:
        19. 1.XSS輸入通常包含JavaScript腳本,如彈出惡意警告框:
        20. 2.XSS輸入也可能是HTML代碼段,譬如:
        21. (1).網頁不停地刷新
        22. (2).嵌入其它網站的鏈接<iframesrc>
        23. 除了通過正常途徑輸入XSS攻擊字符外,還可以繞過JavaScript校驗,通過修改請求達到XSS攻擊的目的,如下圖:
        24. 瞭解到XSS攻擊的原理和危害後,其實要預防也不難,下面提供一個簡單的PHP防止XSS攻擊的函數:
        25. 除了通過正常途徑輸入XSS攻擊字符外,還可以繞過JavaScript校驗,通過修改請求達到XSS攻擊的目的。
        26. 瞭解到XSS攻擊的原理和危害後,其實要預防也不難,下面提供一個簡單的PHP防止XSS攻擊的函數:
        27. 避免被XSS:
        28. 1.給用戶開放的編輯器儘量過濾掉危險的代碼
        29. 如果是html編輯器,一般的做法是保留大部分代碼,過濾部分可能存在危險的代碼,如script,iframe等等
        30. 三、PHPMySQL預處理語句
        31. 預處理語句對於防止MySQL注入是非常有用的。
        32. 預處理語句及綁定參數
        33. 預處理語句用於執行多個相同的SQL語句,並且執行效率更高。
        34. 預處理語句的工作原理如下:
        35. 預處理:創建SQL語句模板併發送到數據庫。預留的值使用參數"?"標記。例如:
        36. 數據庫解析,編譯,對SQL語句模板執行查詢優化,並存儲結果不輸出。
        37. 執行:最後,將應用綁定的值傳遞給參數("?"標記),數據庫執行語句。應用可以多次執行語句,如果參數的值不一樣。
        38. 相比於直接執行SQL語句,預處理語句有兩個主要優點:
        39. 預處理語句大大減少了分析時間,只做了一次查詢(雖然語句多次執行)。
        40. 綁定參數減少了服務器帶寬,你只需要發送查詢的參數,而不是整個語句。
        41. 預處理語句針對SQL注入是非常有用的,因為參數值發送後使用不同的協議,保證了數據的合法性。
        42. PDO預處理機制
        43. 可以使用多種方式實現預處理:指的是在綁定數據進行執行的時候,可以有多種方式。
        44. 預處理語句中為變量
        45. 使用數組指定預處理變量
        46. 1、準備預處理語句(發送給服務器,讓服務器準備預處理語句)
        47. 2、發送預處理語句
        48. 3、給預處理綁定數據
        49. 4、執行預處理:將要操作的數據發送給預處理語句,再執行預處理語句
        50. PDO預處理原理
        51. PDO的預防sql注入的機制也是類似於使用mysql_real_escape_string進行轉義,PDO有兩種轉義的機制,第一種是本地轉義,這種轉義的方式是使用單字節字符集(PHP<5.3.6)來轉義的(單字節與多字節),來對輸入進行轉義,但是這種轉義方式有一些隱患。隱患主要是:在PHP版本小於5.3.6的時候,本地轉義只能轉換單字節的字符集,大於5.3.6的版本會根據PDO連接中指定的charset來轉義。
        52. 第二種方式是PDO,首先將sql語句模板發送給MysqlServer,隨後將綁定的字符變量再發送給Mysqlserver,這裡的轉義是在MysqlServer做的,它是根據你在連接PDO的時候,在charset裡指定的編碼格式來轉換的。這樣的轉義方式更健全,同時還可以在又多次重複查詢的業務場景下,通過複用模板,來提高程序的性能。如果要設置MysqlServer來轉義的話,就要首先執行:
        53. 原始鏈接方法:
        54. 可見這次PHP是將SQL模板和變量是分兩次發送給MySQL的,由MySQL完成變量的轉義處理,既然變量和SQL模板是分兩次發送的,那麼就不存在SQL注入的問題了,但需要在DSN中指定charset屬性,如:
        55. 示例:
        56. 總結:當調用prepare()時,查詢語句已經發送給了數據庫服務器,此時只有佔位符?發送過去,沒有用戶提交的數據;當調用到execute()時,用戶提交過來的值才會傳送給數據庫,他們是分開傳送的,兩者獨立的,SQL攻擊者沒有一點機會。
        57. 小結
        58. ①、關於sql注入可以使用htmlspecialchars()或addslashes()方法,如果連接mysql,可以用mysql_real_escape_string(),還有在php.ini中配置magic_quotes_gpc開啟自動轉義的擴展。
        59. PHP環境打開自動轉義,PHP.INI中查看
        60. 當magic_quotes_gpc=on時將自動進行轉義(默認是on),可在程序中用get_magic_quotes_gpc()檢查他的狀態
        61. 程序為:
        62. ②、關於xss攻擊可以寫一個去處script,frame等代碼的方法:
        63. 直接用這個函數editor_safe_replace代替htmlspecialchars,既保證安全又能用大部分html代碼
        64. 所以,對於PHP的安全而言,一定要對用戶提交的數據進行過濾校驗處理,即先防止SQL注入,後再進行XSS過濾,這兩個都需要兩手一起抓,且兩手都要硬,否則,你的網站將會存在很大的安全風險。
        65. 以上就是php安全問題思考的詳細內容,更多請關注其它相關文章!
多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

多學習才能多賺錢之:php安全問題思考

4=SORT_NATURAL-把每一項作為字符串來處理,使用類似natsort()的自然排序。

5=SORT_FLAG_CASE-可以結合(按位或)SORT_STRING或SORT_NATURAL對字符串進行排序,不區分大小寫。

定義和用法:

sort()函數對索引數組進行升序排序。

rsort()函數對索引數組進行降序排序,其他用法一樣。

註釋:本函數為數組中的單元賦予新的鍵名。原有的鍵名將被刪除。

如果成功則返回TRUE,否則返回FALSE。

提示:請使用rsort()函數對索引數組進行降序排序。

sort()函數用於對數組單元從低到高進行排序。

rsort()函數用於對數組單元從高到低進行排序。

asort()函數用於對數組單元從低到高進行排序並保持索引關係。

PHPasort()函數用於對數組單元從低到高進行排序並保持索引關係,如果成功則返回TRUE,失敗則返回FALSE。

arsort()函數用於對數組單元從高到低進行排序並保持索引關係。

PHParsort()函數行為與asort()相反,對數組單元進行由高到低排序並保持索引關係,請參考asort()函數使用。

ksort()函數用於對數組單元按照鍵名從低到高進行排序。

PHPksort()函數用於對數組單元按照鍵名從低到高進行排序,如果成功則返回TRUE,失敗則返回FALSE。本函數會保留原來的鍵名,因此常用於關聯數組。

krsort()函數用於對數組單元按照鍵名從高到低進行排序。

PHPkrsort()函數行為與ksort()相反,對數組單元按照鍵名進行由高到低排序,請參考ksort()函數使用。

使用用戶自定義的比較函數對數組$a中的元素進行排序:

以上是工作中常用的數組排序方法,想了解更多相關問題:PHP視頻教程

以上就是php排序函數詳細講解(附實例)的詳細內容,更多請關注其它相關文章!


分享到:


相關文章: