當前位置:首頁 » 編程語言 » php防扒

php防扒

發布時間: 2023-04-28 11:41:07

『壹』 php如何做好最基礎的安全防範

PHP如何做好最基礎的安全防範

php給了開發者極大的靈活性,但是這也為安全問題帶來了潛在的隱患,PHP如何做好最基礎的安全防範呢?下面我為大家解答一下,希望能幫到您!

當開發一個互聯網服務的時候,必須時刻牢記安全觀念,並在開發的代碼中體現。PHP腳本語言對安全問題並不關心,特別是對大多數沒有經驗的開發者來說。每當你講任何涉及到錢財事務等交易問題時,需要特別注意安全問題的考慮,例如開發一個論壇或者是一個購物車等。

安全保護一般性要點

不相信表單

對於一般的javascript前台驗證,由於無法得知用戶的行為,例如關閉了瀏覽器的javascript引擎,這樣通過POST惡意數據到伺服器。需要在伺服器端進行驗證,對每個php腳本驗證傳遞到的數據,防止XSS攻擊和sql注入。

不相信用戶

要假設你的網站接收的每一條數據都是存在惡意代碼的,存在隱藏的威脅,要對每一條數據都進行清理

關閉全局變數

在php.ini文件中進行以下配置:

register_globals = Off

如果這個配置選項打開之後,會出現很大的安全隱患。例如有一個process.php的腳本文件,會將接收到的數據插入到資料庫,接收用戶輸入數據的表單可能如下:

< input name="username" type ="text" size = "15" maxlength = "64" >

這樣,當提交數據到process.php之後,php會注冊一個$username變數,將這個變數數據提交到process.php,同時對於任何POST或GET請求參數,都會設置這樣的變數。如果不是顯示進行初始化那麼就會出現下面的問題:

<?php

// Define $authorized = true only if user is authenticated

if

(authenticated_user()) {

$authorized = true;

}

?>

此處,假設authenticated_user函數就是判斷$authorized變數的值,如果開啟了register_globals配置,那麼任何用戶都可以發送一個請求,來設置$authorized變數的值為任意值從而就能繞過這個驗證。所有的這些提交數據都應該通過PHP預定義內置的全局數組來獲取,包括$_POST、$_GET、$_FILES、$_SERVER、$_REQUEST等,其中$_REQUEST是一個$_GET/$_POST/$_COOKIE三個數組的聯合變數,默認的順序是$_COOKIE、$_POST、$_GET。

推薦的安全配置選項

error_reporting設置為Off:不要暴露錯誤信息給用戶,開發的時候可以設置為ON

safe_mode設置為Off

register_globals設置為Off

將以下函數禁用:system、exec、passthru、shell_exec、proc_open、popen

open_basedir設置為 /tmp ,這樣可以讓session信息有存儲許可權,同時設置單獨的網站根目錄expose_php設置為Offallow_url_fopen設置為Offallow_url_include設置為Off

SQL注入攻擊

對於操作資料庫的SQL語句,需要特別注意安全性,因為用戶可能輸入特定語句使得原有的SQL語句改變了功能。類似下面的例子:

$sql ="select * from pinfo where proct = '$proct'";

此時如果用戶輸入的$proct參數為:'39'; DROP pinfo; SELECT 'FOO

那麼最終SQL語句就變成了如下的`樣子:

select proct from pinfo where proct = '39';

DROP pinfo;

SELECT 'FOO'

這樣就會變成三條SQL語句,會造成pinfo表被刪除,這樣會造成嚴重的後果。這個問題可以簡單的使用PHP的內置函數解決:

$sql = 'Select * from pinfo where proct = '"' mysql_real_escape_string($proct) . '"';

防止SQL注入攻擊需要做好兩件事:對輸入的參數總是進行類型驗證對單引號、雙引號、反引號等特殊字元總是使用mysql_real_escape_string函數進行轉義但是,這里根據開發經驗,不要開啟php的Magic Quotes,這個特性在php6中已經廢除,總是自己在需要的時候進行轉義。

防止基本的XSS攻擊

XSS攻擊不像其他攻擊,這種攻擊在客戶端進行,最基本的XSS工具就是防止一段javascript腳本在用戶待提交的表單頁面,將用戶提交的數據和cookie偷取過來。XSS工具比SQL注入更加難以防護,各大公司網站都被XSS攻擊過,雖然這種攻擊與php語言無關,但可以使用php來篩選用戶數據達到保護用戶數據的目的,這里主要使用的是對用戶的數據進行過濾,一般過濾掉HTML標簽,特別是a標簽。下面是一個普通的過濾方法:

function transform_HTML( $string , $length null) { // Helps prevent XSS attacks

// Remove dead space.

$string = trim( $string );

// Prevent potential Unicode codec problems.

$string = utf8_decode( $string );

// HTMLize HTML-specific characters.

$string = htmlentities( $string , ENT_NOQUOTES);

$string = str_replace ( "#" , "#" , $string );

$string = str_replace ( "%" , "%" , $string );

$length = intval ( $length );

if ( $length > 0) {

$string = substr ( $string , 0, $length );

}return $string ;

}

這個函數將HTML的特殊字元轉換為了HTML實體,瀏覽器在渲染這段文本的時候以純文本形式顯示。如bold會被顯示為: BoldText 上述函數的核心就是htmlentities函數,這個函數將html特殊標簽轉換為html實體字元,這樣可以過濾大部分的XSS攻擊。但是對於有經驗的XSS攻擊者,有更加巧妙的辦法進行攻擊:將他們的惡意代碼使用十六進制或者utf-8編碼,而不是普通的ASCII文本,例如可以使用下面的方式進行:

這樣瀏覽器渲染的結果其實是:

< a href = "http://host/a.php?variable=" >

< SCRIPT >Dosomethingmalicious

這樣就達到了攻擊的目的。為了防止這種情況,需要在transform_HTML函數的基礎上再將#和%轉換為他們對應的實體符號,同時加上了$length參數來限制提交的數據的最大長度。

使用SafeHTML防止XSS攻擊

上述關於XSS攻擊的防護非常簡單,但是不包含用戶的所有標記,同時有上百種繞過過濾函數提交javascript代碼的方法,也沒有辦法能完全阻止這個情況。目前,沒有一個單一的腳本能保證不被攻擊突破,但是總有相對來說防護程度更好的。一共有兩個安全防護的方式:白名單和黑名單。其中白名單更加簡單和有效。一種白名單解決方案就是SafeHTML,它足夠智能能夠識別有效的HTML,然後就可以去除任何危險的標簽。這個需要基於HTMLSax包來進行解析。安裝使用SafeHTML的方法:

1、前往http://pixel-apes.com/safehtml/?page=safehtml 下載最新的SafeHTML

2、將文件放入伺服器的classes 目錄,這個目錄包含所有的SafeHTML和HTMLSax庫

3、在自己的腳本中包含SafeHTML類文件

4、建立一個SafeHTML對象

5、使用parse方法進行過濾

<?php/* If you're storing the HTMLSax3.php in the /classes directory, along

with the safehtml.php script, define XML_HTMLSAX3 as a null string. */define(XML_HTMLSAX3, '' );// Include the class file.require_once ( 'classes/safehtml.php' );

// Define some sample bad code.

$data = This data would raise an alert

" ;// Create a safehtml object.$safehtml = new safehtml();// Parse and sanitize the data.$safe_data = $safehtml ->parse( $data );// Display result. echo 'The sanitized data is ' . $safe_data ;

?>

SafeHTML並不能完全防止XSS攻擊,只是一個相對復雜的腳本來檢驗的方式。

使用單向HASH加密方式來保護數據

單向hash加密保證對每個用戶的密碼都是唯一的,而且不能被破譯的,只有最終用戶知道密碼,系統也是不知道原始密碼的。這樣的一個好處是在系統被攻擊後攻擊者也無法知道原始密碼數據。加密和Hash是不同的兩個過程。與加密不同,Hash是無法被解密的,是單向的;同時兩個不同的字元串可能會得到同一個hash值,並不能保證hash值的唯一性。MD5函數處理過的hash值基本不能被破解,但是總是有可能性的,而且網上也有MD5的hash字典。

使用mcrypt加密數據MD5 hash函數可以在可讀的表單中顯示數據,但是對於存儲用戶的信用卡信息的時候,需要進行加密處理後存儲,並且需要之後進行解密。最好的方法是使用mcrypt模塊,這個模塊包含了超過30中加密方式來保證只有加密者才能解密數據。

<?php$data = "Stuff you want encrypted" ;

$key = "Secret passphrase used to encrypt your data" ;

$cipher = "MCRYPT_SERPENT_256" $mode = "MCRYPT_MODE_CBC" ;function encrypt( $data, $key , cipher , $mode ) {// Encrypt datareturn (string) base64_encode ( mcrypt_encrypt ( $cipher , substr (md5( $key ),0,mcrypt_get_key_size( $cipher , $mode )), $data , $mode , substr (md5( $key ),0,mcrypt_get_block_size( $cipher , $mode )) ) );

}function decrypt( $data , $key ,$cipher , $mode ) {// Decrypt data

return (string) mcrypt_decrypt ( $cipher , substr (md5( $key ),0,mcrypt_get_key_size( $cipher , $mode )), base64_decode ( $data ), $mode , substr (md5( $key ),0,mcrypt_get_block_size( $cipher , $mode )) );

}?>

mcrypt函數需要以下信息:

1、待加密數據

2、用來加密和解密數據的key

3、用戶選擇的加密數據的特定演算法(cipher:

如 MCRYPT_TWOFISH192

,MCRYPT_SERPENT_256, MCRYPT_RC2

, MCRYPT_DES

, and MCRYPT_LOKI97

4、用來加密的模式

5、加密的種子,用來起始加密過程的數據,是一個額外的二進制數據用來初始化加密演算法

6、加密key和種子的長度,使用mcrypt_get_key_size函數和mcrypt_get_block_size函數可以獲取如果數據和key都被盜取,那麼攻擊者可以遍歷ciphers尋找開行的方式即可,因此我們需要將加密的key進行MD5一次後保證安全性。同時由於mcrypt函數返回的加密數據是一個二進制數據,這樣保存到資料庫欄位中會引起其他錯誤,使用了base64encode將這些數據轉換為了十六進制數方便保存。

;

『貳』 php怎麼防止抓包工具

我是做數據採集的,
在我看來,除了輸入驗證碼 , 沒有什麼能對我起到很好的防採集,

一般大的網站都是採用 網頁加入一次性隨機值 ,再有前端JS 生成秘鑰 ,最後一並提交加密了的數據 ,這種沒什麼效果 。對一般的人可以做下防禦 。但是,我只要找出它的JS加密函數 。 使用一個JS伺服器(node.js),或php的 php 改寫的js加密實現過程 ,加密初始值,再模擬發送 。所以,這個也沒什麼多大作用 。

對於驗證碼 ,一般簡單的都可以程序識別 ,復雜的提交到前台讓手動輸入 。再一並發送。 這種用戶體驗不好。 慎行。

總的來說,建議用JS 加密吧 。
但是,還是防禦不了。

我一般用 filefox 的 filebug 或 小提琴工具 。
目前大半年了,沒有破解不了的網站 。

我用我的php程序 ,可以操作你的網站 。實現 用戶操作 我的php程序 ,我的php程序 再去操作源網站 。

你可以去研究下 58同城網 的登錄 。那裡面一堆的加密 。 在我看來都是垃圾代碼 。 我的程序一鍵登錄進去。

『叄』 php防止sql注入的函數介紹

具體用法

addslashes防止SQL注入

雖然國內很多PHP程序員仍在依靠addslashes防止SQL注入 還是建議大家加強中文防止SQL注入的檢查 addslashes的問題在 於黑客 可以用 xbf 來代替單引號 而addslashes只是將 xbf 修改為 xbf c 成為一個有效的多位元組字元 其中的 xbf c仍會 被看作是單引號 所以addslashes無法成功攔截

當然addslashes也不是毫無用處 它是用於單位元組字元串的處理 多位元組字元還是用mysql_real_escape_string吧

另外對於php手冊中get_magic_quotes_gpc的

舉例

代碼如下

<?php function post_check($post) { if (!get_magic_quotes_gpc()) // 判斷magic_quotes_gpc是否為打開 { $post = addslashes($post); // 進行magic_quotes_gpc沒有打開的情況對提交數據的過濾 } $post = str_replace("_" "_" $post); // 把 _ 過濾掉 $post = str_replace("%" "%" $post); // 把 % 過濾掉 $post = nl br($post); // 回車轉換 $post= specialchars($post); // 標記轉換 return $post; } ?>

<?php function inject_check($sql_str) { return eregi( select|insert|update|delete| | function verify_id($id=null) { if (!$id) { exit( 沒有提交參數! ); } // 是否為空判斷 elseif (inject_check($id)) { exit( 提交的參數非法! ); } // 注射判碰仔肆斷 elseif (!is_numeric($id)) { exit( 提交的參數非法! ); } // 數字判斷 $id = intval($id); // 整型化 return $id; } ?>

string mysql_real_escape_string ( string $unescaped_string [ resource $link_identifier ] )

本函數將 unescaped_string 中的特殊字元轉義 並計及連接的笑轎當前字元集 因此可以安全用於 mysql_query()

Note: mysql_real_escape_string() 並不轉義 % 和 _

mysql_real_escape_string

Example# mysql_real_escape_string() 例子

代碼如下

<?php $item = "Zak s and Derick s Laptop" ; $escaped_item = mysql_real_escape_string ( $item ); printf ( "Escaped string: %sn" $escaped_item ); ?>

以上例子將產生如下輸出

Escaped string: Zak s and Derick s Laptop

mysql_escape_string

本函數將 unescaped_string 轉義 使之可以安全用於 mysql_query()

注: mysql_escape_string() 並不轉義 % 和 _

本函數和 mysql_real_escape_string() 完全一樣 除了 mysql_real_escape_string() 接受的是一戚並個連接句柄並根據當前字元集轉移字元串之外 mysql_escape_string() 並不接受連接參數 也不管當前字元集設定

例子 mysql_escape_string() 例子

代碼如下

<?php $item = "Zak s Laptop"; $escaped_item = mysql_escape_string($item); printf ("Escaped string: %sn" $escaped_item); ?> 輸出 Escaped string: Zak s Laptop

mysql_real_escape_string和mysql_escape_string這 個函數的區別

mysql_real_escape_string 必須在(PHP >= PHP )的情況下才能使用 否則只能用 mysql_escape_string 兩者的區別是 mysql_real_escape_string 考慮到連接的當前字元集 而mysql_escape_string 不考慮

我們可以利用判斷來綜合處理

代碼如下 function cleanuserinput($dirty){ if (get_magic_quotes_gpc()) { $clean = mysql_real_escape_string(stripslashes($dirty)); }else{ $clean = mysql_real_escape_string($dirty); } return $clean; }

總結一下

* addslashes() 是強行加;

* mysql_real_escape_string() 會判斷字元集 但是對PHP版本有要求;

lishixin/Article/program/PHP/201311/21094

『肆』 怎麼用php把一整套網站扒下來

仿站小工具+V8.2

『伍』 php文件如何防止被下載

下載也看不到源代碼的.下載的是轉譯過的HTML代碼.
如果你擔心你的源代碼安全,可以用safeguard加密一下.

『陸』 php文件能不能扒下來

可以扒,但前提是別人得允許你訪問,你得獲取開放地址。

PHP(PHP: Hypertext Preprocessor)即「超文本預處理器」,是在伺服器端執行的腳本語言,早談局尤其適用於Web開發並可嵌入HTML中。PHP語法學習了C語言,吸納Java和Perl多個語言的特色發展出自己的特色語侍野法,並根據它們的長項持續改進提升自己。

例如java的面向對象編程,該語言當初創建的主要目標是讓開發人員快速編寫出優質的web網站。PHP同時支持面向對象和面向過程的開發,使用上非常靈活。

經過二十多年的發展,隨著php-cli相關組件的快速發展和完善,PHP已經可以應用在TCP/UDP服務、高性能Web、WebSocket服務、物聯網、實時通訊、游戲、微服務等非 Web 領域的系陸讓統研發。

『柒』 如何實現php整站下載

現在網上的整站下載器只能下載html,css,js,圖片,php代碼和資料庫只能進到伺服器里才能看到,所以想要下載出後台文件基本是不可能的。

IIS7整站下載器可以有下述功能:1、可多站同時下載、多站同時扒
2、可單頁扒
3、可自定義, 重寫JS\圖片\CSS路徑
4、執行全站下載後,會下載到本程序根目錄下的html文件夾下。
5、全站替換,根據關鍵詞替換。N個(多個)關鍵詞替換。
6、多線程下載
7、自動補齊404不存在的鏈接頁面(下載大站的時候需要)
8、插入自定義的JS(全站插入)
9、整站下載
10、單頁下載

『捌』 我想扒一個很漂亮的站點下來做為自己的模版,但是wordpress是.php文件我扒下來的是html文件怎麼搞!

像你說的直接把其他程序如DEDE,陪吵PHPCMS的模板拿來給WP使用是不可能的。

WP是不支持HTML的,你只能把HTML改寫成PHP調用,也就是仿模板。這是個技術活,但不是很難,你只需要一張首頁靜態頁面:index.html,包括它的圖片等,一個CSS代碼,就可以修改成WP的模板。在這里我說下簡單的原理:就是把index.html拆分成index.php(主體),header.php(頂部),footer.php(底部),sidebar.php(邊欄)等等。

姿宴HTML代碼生成的網頁是完整的一頁,而對於WP來說,當你寫一篇文章生成一個網頁的時候,實際上WP是調用了我上面說的這些位置的PHP代碼(代碼部分用的大部分是WP程序自帶的PHP命令,所跡亂銀以不能和DEDE等其它程序共用模板),整合成這樣的一個頁面。

熱點內容
蘋果6vpn添加配置怎麼弄 發布:2024-11-01 12:36:18 瀏覽:796
職場的幸福密碼是什麼 發布:2024-11-01 12:34:57 瀏覽:748
18經驗起床的伺服器ip 發布:2024-11-01 12:30:15 瀏覽:39
這個鎖屏密碼是什麼 發布:2024-11-01 12:24:51 瀏覽:92
相機存儲卡排名 發布:2024-11-01 12:24:49 瀏覽:958
androidxml格式化 發布:2024-11-01 12:23:14 瀏覽:165
Vb6編譯是錯誤不知道錯誤代碼 發布:2024-11-01 12:16:23 瀏覽:159
區域網電腦訪問伺服器怎麼提速 發布:2024-11-01 12:14:09 瀏覽:322
美創資料庫 發布:2024-11-01 12:05:45 瀏覽:916
你改愛奇藝密碼什麼意思 發布:2024-11-01 12:04:48 瀏覽:409