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