程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php常用的安全過濾函數集錦,php函數集錦

php常用的安全過濾函數集錦,php函數集錦

編輯:關於PHP編程

php常用的安全過濾函數集錦,php函數集錦


雖然各種開發框架給我們提供了很好的安全的處理方式,但是,我們還是要注意一下安全問題的。
 原因簡單:很多小的功能和項目是用不到框架的,我們需要自己解決安全問題!

①常用的安全函數有哪些:
復制代碼 代碼如下:
mysql_real_escape_string()
 addslashes()

②這些函數的作用:

mysql_real_escape_string()和addslashes()函數都是對數據中的 單引號、雙引號進行轉義!也就是防止sql注入!
 但是mysql_real_escape_string()考慮了字符集,更加的安全一些!
 經過查閱相關的資料,可以得出一個結論:當前的字符集是單字節的話,這兩個函數作用相同,都可以起到轉義過濾的作用,但是,有誰會只是用單字節呢?尤其是utf8越來越廣泛的被使用到!

③函數的用法:

在了解mysql_real_escape_string()和addslashes()這兩個函數的用法的時候,我們必須先了解另外兩個函數的含義!

get_magic_quotes_gpc()和get_magic_quotes_runtime(),我們來比較一下兩個函數的異同:

相同:
 
a、兩者都是用來獲取php.ini配置文件的配置情況的!當開啟的時候返回1,關閉的時候返回0!

b、當開啟的時候,都會對指定范圍內的數據進行轉義過濾!

不同:
a、兩者的作用范圍不同:
magic_quotes_gpc主要作用於web客戶端,簡單的說主要是對$_GET、$_POST、$_COOKE中的數據進行過濾!
magic_quotes_runtime主要是對文件中讀取的數據或從數據庫查詢得到的數據進行過濾!
b、設置時間不同:
magic_quotes_gpc不可以在運行時進行設置[只能在重啟服務器的時候讀取該設置]
magic_quotes_runtime可以在運行時設置!
 注意:所謂運行時設置,就是,我們可以通過ini_set()函數,在腳本中對php.ini文件中的配置進行設置!
 
明白了get_magic_quotes_gpc()和get_magic_quotes_runtime()這兩個函數的後,我們就應該明白了:當我們檢測到php.ini配置文件開啟了magic_quotes_runtime 和 magic_quotes_gpc的話,就會自動的對指定范圍內的數據進行轉義!如果關閉的話,我們就需要使用mysql_real_escape_string()[或者addslashes函數進行過濾]

④舉例說明:

1、無論magic_quotes_gpc和magic_quotes_runctime開啟還是關閉的情況下getdata.php腳本,都可以對數據進行安全轉移,內容如下:
復制代碼 代碼如下:
<?php
    if(!get_magic_quotes_gpc()) {
        foreach($_GET as $key=> &$value) {
            $value = mysql_real_escape_string($value);
        }
    }
    if(!get_magic_quotes_runtime()) {
        $sourceDataRecord= file('./sourceData.txt');
        if($sourceDataRecord) {
            foreach($sourceDataRecord as $sourceKey => &$sourceValue) {
                $sourceValue = mysql_real_escape_string($sourceValue);
            }
        }
    }
    $gpcData = implode("\t", $_GET);
    $runtimeData = implode("\t", $sourceDataRecord);
    echo $gpcData, $runtimeData;
?>

 在sourceData.txt中的內容如下:

復制代碼 代碼如下:
" It's anoterh sunday afternoon
 I'm trunning turnning.....turnning around "
 

我們請求getData.php時的url如下:

php.test.com/safe/getdata.php?name=maw'eibin&age=25
 
執行結果如下:

復制代碼 代碼如下:
maw\'eibin 25\" It\'s anoterh sunday afternoon\r\n I\'m trunning
 turnning.....turnning around \"

⑤參考資料:

http://www.bkjia.com/article/35868.htm


看到很多php的安全過濾函數,經常把一些字符給替換掉,那用戶輸入的信息改變了不是很不好?解

正像你所說的,安全過濾,為了安全而限制用戶的行為是必須的,你想想這樣的限制針對的是什麼用戶?是有意危害網站安全的用戶。舉幾個例子:
把標題中的html標簽過濾。因為標題一般都是純文本,1.html標簽會導致布局錯亂2.會包含危險script 3.把引號等字符編碼為html實體並不會影響其最終顯示效果;
把正文中的<script>標簽過濾掉。因為普通用戶根本不會去執行script。所以我們一般有兩種做法:1.把script去掉,2.用html實體字符編碼標簽,這樣在顯示文章既可以顯示代碼段又不會執行代碼了;
過濾查詢參數的單引號。這是為了防止sql注入,一般有三種方法來實現:1.給引號添加反斜線2.去掉引號3.用sql的prepare動態綁定參數;
總之,不要信任任何的用戶輸入,限制還是為了更多的普通用戶更好的使用咱們的服務。

 

PHP 過濾函數有什

addslashes()
mysql_real_escape_string
用在插入數據庫的時候的安全過濾上,一般就是轉碼
htmlspecialchars :html系列的也有一些函數,你這便提到的這個是期中之一,這個是將數據輸出到浏覽器或是終端的時候進行一次編碼,防止輸出的數據中含有惡意js代碼或是其它代碼而進行轉碼

strip_tags : 這個就是去除一些html標簽,和php的一些標簽,用在什麼地方你就看著辦了··想過濾這些標簽的地方都可以用
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved