PHÁT TRIỂN ỨNG DỤNG WEB : MÃ HÓA VÀ GIẢI MÃ TRANG PHP – Tài liệu text

PHÁT TRIỂN ỨNG DỤNG WEB : MÃ HÓA VÀ GIẢI MÃ TRANG PHP

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (375.18 KB, 12 trang )

PHÁT TRIỂN ỨNG DỤNG WEB
TÊN ĐỀ TÀI : MÃ HÓA VÀ GIẢI MÃ TRANG PHP

MỤC LỤC

1

I.

SƠ LƯỢC VỀ PHP VÀ MÃ HÓA TRONG PHP

1. Sơ lược về PHP
PHP được xem là ngôn ngữ kịch bản phía máy chủ phổ biến nhất trên thế
giới, nó đã phát triển rất nhiều kể từ khi các đoạn code inline đầu tiên xuất hiện
trong các tập tin HTML tĩnh.
PHP khởi đầu như là một dự án mã nguồn mở nhỏ, nhưng theo đà phát
triển, ngày càng nhiều người thấy rằng nó càng ngày càng hữu ích. PHP được phát
triển từ một sản phẩm có tên là PHP/FI. PHP/FI do Rasmus Lerdorf tạo ra năm
1994, ban đầu được xem như là một tập con đơn giản của các mã kịch bản Perl để
theo dõi tình hình truy cập đến bản sơ yếu lý lịch của ông trên mạng. Ông đã đặt tên
cho bộ mã kịch bản này là “Personal Home Page Tools”. Khi cần đến các chức năng
rộng hơn, Rasmus đã viết ra một bộ thực thi bằng C lớn hơn để có thể truy vấn tới
Database và giúp cho người sử dụng phát triển các ứng dụng web đơn giản.
Rasmus đã quyết định công bố mã nguồn của PHP/FI cho mọi người xem, sử dụng
cũng như sửa các lỗi có trong nó, đồng thời cải tiến mã nguồn.
• PHP viết hồi qui của “PHP: Hypertext Preprocessor”.
• PHP là ngôn ngữ lập trình kịch bản viết cho máy chủ mà được nhúng
trong HTML. Nó được sử dụng để quản lý nội dụng động, Database,
Session tracking, …
• Nó được tích hợp với một số Database thông dụng như MySQL,

PostgreSQL, Oracle, Sybase, Informix, và Microsoft SQL Server.
• PHP thực thi rất tuyệt vời, đặc biệt khi được biên dịch như là một
Apache Module trên Unix side. MySQL Server, khi được khởi động,
thực thi các truy vấn phức tạp với các tập hợp kết quả khổng lồ trong
thời gian Record-setting.
• PHP hỗ trợ một số lượng rộng rãi các giao thức lớn như POP3, IMAP,
và LDAP. PHP4 bổ sung sự hỗ trợ cho Java và các cấu trúc đối tượng
phân phối (COM và CORBA)
• Cú pháp PHP là giống C.

2

2. Khái niệm về mã hóa và giải mã
2.1 Khái niệm về mã hóa (encode)

Trong mật mã học, một ngành toán học ứng dụng cho công nghệ thông
tin, mã hóa là phương pháp để biến thông tin (phim ảnh, văn bản, hình ảnh…) từ
định dạng bình thường sang dạng thông tin không thể hiểu được nếu không có
phương tiện giải mã.
Từ thời xa xưa, mã hóa được sử dụng nhiều trong các thư từ, điện tín, đặc
biệt được ưa chuộng khi có chiến tranh xảy ra, đóng góp quan trọng vào việc đảm
bảo an toàn thông tin.
Ngày nay, thời đại mà internet phát triển một cách nhanh chóng, khi mà nhà
nhà người người đều sử dụng internet và chia sẻ những thông tin cá nhân của
mình trên đó. Việc bảo mật những thông tin này là thực sự cần thiết, và một trong
những cách để bảo mật thông tin hữu hiệu nhất hiện nay là mã hóa.
2.2 Khái niệm về giải mã (decode)

Giải mã là phương pháp để đưa từ dạng thông tin đã được mã hóa về dạng

thông tin ban đầu, quá trình ngược của mã hóa.

3

II.

CÁC KIỂU MÃ HÓA TRONG PHP VÀ CÁCH GIẢI MÃ

1. Mã hóa Encode / Decode
1.1 Giới thiệu
Trường hợp cần viết một chuỗi unicode được mã hóa mà không được sử
dụng trực tiếp ký tự unicode vào code. Cách này đặc biệt hữu dụng trong việc sửa
đổi bytecode của java để hiển thị tiếng việt.
1.2 Ví dụ
Sử dụng hàm json_encode sẽ giúp bạn tìm ra chuỗi mã hóa unicode.
header(‘content-type:application/json’);
#or text/plain
echo
json_encode(array(‘fullname’=>’hoang’,’address’=>’An
Giang’,’LoanType’=>’Vay theo lương’));
Kết quả ra chuỗi json thế này chứa các kỹ tự unicode mã hóa giống như thế này.
[{“fullname”:”hoang”,”address”:”An
Giang”,”loanType”:”Vay
theo
l\u01b0\u01a1ng”}]

Để hiển thị chuỗi giải mã đọc được từ ký tự unicode mã hóa bởi json_encode, chúng
ta gọi hàm json_decode.
print_r(json_decode(‘[“Vay theo l\u01b0\u01a1ng”]’));

Kết quả chuyển thành mảng có chứa ký tự đã giải mã:
Array ( [0] => Vay theo lương )

1.3 Cách giải mã

• Nếu mã hóa có dạng eval(base64_decode
php $o=”encrypted text”;eval(base64_decode(‘rubbish’));return;
Để giải mã đoạn code bị mã họa dạng này, chỉ cần copy đoạn “‘encrypted text” vào
khung

nhấn
nút
Decode
this
Mess

được.
Trang web với công cụ giải mã: />4

• Nếu mã hóa có dạng eval(gzinflate(base64_decode(‘encrypted text’)));
eval(gzinflate(base64_decode(’80jNyclXyFTPVUhJTc5PSU0BAA==’)));

Để giải mã đoạn code bị mã hóa dạng này, bạn chỉ cần copy đoạn:
“80jNyclXyFTPVUhJTc5PSU0BAA==” vào khung và nhấn decode là được.
Công cụ giải mã: />•

Mã hóa dạng Rubbish

php
$_F=__FILE__;$_X=’encrypted
text’;eval(base64_decode(‘rubbish’));
Để giải mã, bạn copy đoạn “encrypted text” vào khung và nhấn Decode this Rubbish.
Công cụ giải mã: />Một số kiểu encoding có thể sử dụng
MD5 converter

SHA1 converter
Chatset converter / iconv
Base64 encode
Base64 decode
UTF8 encode
UTF8 decode
Raw url encode
Raw url decode
HTML entities encode
HTML entities decode
Unix Time to Human Date
Human Date to Unix Time Stamp
Remove duplicate lines
Sort text lines
Pirate Text
Backwards – Mirrored Text

5

Ngoài ra có thể tìm hiểu thêm. Sử dụng công cụ chuyển đổi
encoding/decoding chuỗi online:

.

1.4 Mã hóa đối tượng
Nhiều lúc việc mã hóa mảng thành chuỗi json không tiện cho lắm, dễ bị
người khác đọc dữ liệu vì tính bảo mật. Có một cách khác giúp bạn mã hóa mọi đối
tượng thành kiểu chuỗi, và WordPress cũng đã sử dụng cách mã hóa các đối tượng
của nó với kiểu này.
Bằng cách sử dụng hàm serialize() để mã hóa đối tượng và hàm
ngược unserialize() sẽ biến nội dung kiểu chuỗi được mã hóa bởi serialize() thành
chính object trước đó.
$data = array(‘name’=>”Hoang”, “old”=>24);
var_dump($data);
/* array
‘name’ => string ‘Hoang’ (length=5)
‘old’ => int 24
*/
// Serialize array $data
$text_serialize = serialize($data);
var_dump($text_serialize);
/* string ‘a:2:{s:4:”name”;s:3:”Hoang”;s:3:”old”;i:24;}’ (length=44) */
// Unserialize array $data
$data_unserialize = unserialize($text_serialize);
var_dump($data_unserialize);
/* array
‘name’ => string ‘Hoang’ (length=5)
‘old’ => int 24
*/
?>

6

Kết quả:
a:2:{s:4:”name”;s:3:”Hoang”;s:3:”old”;i:24;}

Rất tiện cho lưu các đối tượng PHP vào Database.
Lưu ý: Ta có thể sử dụng serialize() và unserialize() cho mọi đối tượng PHP:
object, array, base object,…
Trong WordPress có viết hàm giúp bạn kiểm tra một chuỗi được tạo bởi
serialize từ một đối tượng, trước khi sử dụng hàm giải mã đối tượng unserialize
bạn nên kiểm tra có hợp lệ không với hàm is_serialized của wordpress. Hàm này
trích dẫn có sẵn trong wordpress .
//I didn’t write this code, it’s from WordPress actually
function is_serialized( $data ) {
// if it isn’t a string, it isn’t serialized
if ( !is_string( $data ) )
return false;
$data = trim( $data );
if ( ‘N;’ == $data )
return true;
if ( !preg_match( ‘/^([adObis]):/’, $data, $badions ) )
return false;
switch ( $badions[1] ) {
case ‘a’ :
case ‘O’ :
case ‘s’ :
if ( preg_match( “/^{$badions[1]}:[0-9]+:.*[;}]\$/s”, $data ) )
return true;

break;
case ‘b’ :
case ‘i’ :
case ‘d’ :
if ( preg_match( “/^{$badions[1]}:[0-9.E-]+;\$/”, $data ) )
return true;
break;
}
return false;
}
?>

7

III.

DEMO MÃ HÓA FILE PHP BẰNG ZEND GUARD
Bước 1 :
Tải
chương
trình
tại trang
web
/>Đồng thời hãy tiến hành cài đặt và khởi động chương trình

:

Bước 2 : Tạo 1 Project bằng cách : File >>> New >>> Zend Guard Project.

8

9

Bước 3 : Chọn
source nguồn cần
mã hóa, ví dụ bằng
file config.php vì
file này chứa các
khai báo database
quan trọng của
website/forum
>>> Next.

Bước 4 : Lựa chọn cấu hình cách thức mã hóa cho phiên bản PHP phù hợp
với nhu cầu sử dụng.

Bước 5 : Nhấn nút Encode project như hình để bắt đầu tiến trình mã hóa:

Kết quả : Sau khi Encode thành công, chương trình sẽ tạo ra file có nội dung
mã hóa tại Output Location: D:\Temp\Zend mà chúng ta đã khai báo trong
thông tin Project.

10

IV.

KẾT LUẬN

Càng ngày càng có rất nhiều loại lỗ hổng bảo mật mạng được tìm ra.

Nhớ các tools và công cụ, chúng ta đã tìm ra những phương pháp tấn công
lỗ hổng đề từ đó tìm các biện pháp khắc phục cho hệ thống mạng Lan của
mình. Việc vận dụng các công cụ có sẵn này bất kỳ người nào cũng có thể tự
tìm tòi và khám phá ra được, tuy nhiên hãy sử dụng nó vào mục đích tốt,
không nên sử dụngvào mục đích xấu và lạm dụng đời sống riêng tư cá nhân.

Trong đề tài này, mình đã thu thập được các thông tin trên các diễn đàn và
một số hiểu biết cá nhân. Phần cài đặt chạy trực tiếp trên máy và đã thử
nghiệm thành công.

Tuy nhiên, trong quá trình biên soạn, có thể kiến thức còn chưa chuyên sâu
và một số thông tin thu thập trên mạng nên việc tìm hiểu còn nhiều thiếu sót,
kính mong Quý Thầy Cô và các bạn thông cảm.

V.

11

TÀI LIỆU THAM KHẢO
Tiếng Việt :
1. Hưng Phú, “Hướng dẫn mã hóa code HTML và PHP”

Link :

/>2. Mr.Toan, “Tổng hợp các trang mã hóa – giải mã code php”

Link :

/>Tiếng Anh :
Convert character encoding – PHP
Link :
/>
12

PostgreSQL, Oracle, Sybase, Informix, và Microsoft SQL Server. • PHP thực thi rất tuyệt vời, đặc biệt quan trọng khi được biên dịch như là mộtApache Module trên Unix side. MySQL Server, khi được khởi động, thực thi những truy vấn phức tạp với những tập hợp hiệu quả khổng lồ trongthời gian Record-setting. • PHP tương hỗ một số lượng thoáng rộng những giao thức lớn như POP3, IMAP, và LDAP. PHP4 bổ trợ sự tương hỗ cho Java và những cấu trúc đối tượngphân phối ( COM và CORBA ) • Cú pháp PHP là giống C. 2. Khái niệm về mã hóa và giải mã2. 1 Khái niệm về mã hóa ( encode ) Trong mật mã học, một ngành toán học ứng dụng cho công nghệ tiên tiến thôngtin, mã hóa là giải pháp để biến thông tin ( phim ảnh, văn bản, hình ảnh … ) từđịnh dạng thông thường sang dạng thông tin không hề hiểu được nếu không cóphương tiện giải mã. Từ thời thời xưa, mã hóa được sử dụng nhiều trong những thư từ, điện tín, đặcbiệt được yêu thích khi có cuộc chiến tranh xảy ra, góp phần quan trọng vào việc đảmbảo bảo đảm an toàn thông tin. Ngày nay, thời đại mà internet tăng trưởng một cách nhanh gọn, khi mà nhànhà người người đều sử dụng internet và san sẻ những thông tin cá thể củamình trên đó. Việc bảo mật thông tin những thông tin này là thực sự thiết yếu, và một trongnhững cách để bảo mật thông tin thông tin hữu hiệu nhất lúc bấy giờ là mã hóa. 2.2 Khái niệm về giải mã ( decode ) Giải mã là giải pháp để đưa từ dạng thông tin đã được mã hóa về dạngthông tin khởi đầu, quy trình ngược của mã hóa. II.CÁC KIỂU MÃ HÓA TRONG PHP VÀ CÁCH GIẢI MÃ1. Mã hóa Encode / Decode1. 1 Giới thiệuTrường hợp cần viết một chuỗi unicode được mã hóa mà không được sửdụng trực tiếp ký tự unicode vào code. Cách này đặc biệt quan trọng hữu dụng trong việc sửađổi bytecode của java để hiển thị tiếng việt. 1.2 Ví dụSử dụng hàm json_encode sẽ giúp bạn tìm ra chuỗi mã hóa unicode.header ( ‘ content-type : application / json ‘ ) ; # or text / plainechojson_encode ( array ( ‘ fullname ‘ => ‘ hoang ‘, ‘ address ‘ => ‘ AnGiang ‘, ‘ LoanType ‘ => ‘ Vay theo lương ‘ ) ) ; Kết quả ra chuỗi json thế này chứa những kỹ tự unicode mã hóa giống như thế này. [ { ” fullname ” : ” hoang “, ” address ” : ” AnGiang “, ” loanType ” : ” Vaytheol \ u01b0 \ u01a1ng ” } ] Để hiển thị chuỗi giải mã đọc được từ ký tự unicode mã hóa bởi json_encode, chúngta gọi hàm json_decode. print_r ( json_decode ( ‘ [ ” Vay theo l \ u01b0 \ u01a1ng ” ] ‘ ) ) ; Kết quả chuyển thành mảng có chứa ký tự đã giải mã : Array ( [ 0 ] => Vay theo lương ) 1.3 Cách giải mã • Nếu mã hóa có dạng eval ( base64_decodephp USD o = ” encrypted text ” ; eval ( base64_decode ( ‘ rubbish ‘ ) ) ; return ; Để giải mã đoạn code bị mã họa dạng này, chỉ cần copy đoạn “ ‘ encrypted text ” vàokhungvànhấnnútDecodethisMesslàđược. Trang web với công cụ giải mã : / > 4 • Nếu mã hóa có dạng eval ( gzinflate ( base64_decode ( ‘ encrypted text ’ ) ) ) ; eval ( gzinflate ( base64_decode ( ‘ 80 jNyclXyFTPVUhJTc5PSU0BAA = = ‘ ) ) ) ; Để giải mã đoạn code bị mã hóa dạng này, bạn chỉ cần copy đoạn : “ 80 jNyclXyFTPVUhJTc5PSU0BAA = = ” vào khung và nhấn decode là được. Công cụ giải mã : / > • Mã hóa dạng Rubbishphp $ _F = __FILE__ ; $ _X = ‘ encryptedtext ‘ ; eval ( base64_decode ( ‘ rubbish ‘ ) ) ; Để giải mã, bạn copy đoạn “ encrypted text ” vào khung và nhấn Decode this Rubbish. Công cụ giải mã : / > Một số kiểu encoding hoàn toàn có thể sử dụngMD5 converterSHA1 converterChatset converter / iconvBase64 encodeBase64 decodeUTF8 encodeUTF8 decodeRaw url encodeRaw url decodeHTML entities encodeHTML entities decodeUnix Time to Human DateHuman Date to Unix Time StampRemove duplicate linesSort text linesPirate TextBackwards – Mirrored TextNgoài ra hoàn toàn có thể khám phá thêm. Sử dụng công cụ chuyển đổiencoding / decoding chuỗi trực tuyến : 1.4 Mã hóa đối tượngNhiều lúc việc mã hóa mảng thành chuỗi json không tiện cho lắm, dễ bịngười khác đọc tài liệu vì tính bảo mật thông tin. Có một cách khác giúp bạn mã hóa mọi đốitượng thành kiểu chuỗi, và WordPress cũng đã sử dụng cách mã hóa những đối tượngcủa nó với kiểu này. Bằng cách sử dụng hàm serialize ( ) để mã hóa đối tượng người tiêu dùng và hàmngược unserialize ( ) sẽ biến nội dung kiểu chuỗi được mã hóa bởi serialize ( ) thànhchính object trước đó. $ data = array ( ‘ name ‘ => ” Hoang “, ” old ” => 24 ) ; var_dump ( $ data ) ; / * array’name ‘ => string ‘ Hoang ‘ ( length = 5 ) ‘ old ‘ => int 24 * / / / Serialize array USD data USD text_serialize = serialize ( $ data ) ; var_dump ( $ text_serialize ) ; / * string ‘ a : 2 : { s : 4 : ” name ” ; s : 3 : ” Hoang ” ; s : 3 : ” old ” ; i : 24 ; } ‘ ( length = 44 ) * / / / Unserialize array USD data USD data_unserialize = unserialize ( $ text_serialize ) ; var_dump ( $ data_unserialize ) ; / * array’name ‘ => string ‘ Hoang ‘ ( length = 5 ) ‘ old ‘ => int 24 * / ? > Kết quả : a : 2 : { s : 4 : ” name ” ; s : 3 : ” Hoang ” ; s : 3 : ” old ” ; i : 24 ; } Rất tiện cho lưu những đối tượng người tiêu dùng PHP vào Database. Lưu ý : Ta hoàn toàn có thể sử dụng serialize ( ) và unserialize ( ) cho mọi đối tượng người dùng PHP : object, array, base object, … Trong WordPress có viết hàm giúp bạn kiểm tra một chuỗi được tạo bởiserialize từ một đối tượng người dùng, trước khi sử dụng hàm giải mã đối tượng người tiêu dùng unserializebạn nên kiểm tra có hợp lệ không với hàm is_serialized của wordpress. Hàm nàytrích dẫn có sẵn trong wordpress. / / I didn’t write this code, it’s from WordPress actuallyfunction is_serialized ( $ data ) { / / if it isn’t a string, it isn’t serializedif ( ! is_string ( $ data ) ) return false ; USD data = trim ( $ data ) ; if ( ‘ N ; ‘ = = $ data ) return true ; if ( ! preg_match ( ‘ / ^ ( [ adObis ] ) : / ‘, $ data, $ badions ) ) return false ; switch ( USD badions [ 1 ] ) { case ‘ a ‘ : case ‘ O ‘ : case ‘ s ‘ : if ( preg_match ( ” / ^ { $ badions [ 1 ] } : [ 0-9 ] + :. * [ ; } ] \ $ / s “, $ data ) ) return true ; break ; case ‘ b ‘ : case ‘ i ‘ : case ‘ d ‘ : if ( preg_match ( ” / ^ { $ badions [ 1 ] } : [ 0-9. E – ] + ; \ USD / “, $ data ) ) return true ; break ; return false ; ? > III.DEMO MÃ HÓA FILE PHP BẰNG ZEND GUARDBước 1 : Tảichươngtrìnhtại trangweb / > Đồng thời hãy thực thi thiết lập và khởi động chương trìnhBước 2 : Tạo 1 Project bằng cách : File >> > New >> > Zend Guard Project. Bước 3 : Chọnsource nguồn cầnmã hóa, ví dụ bằngfile config.php vìfile này chứa cáckhai báo databasequan trọng củawebsite / forum >> > Next. Bước 4 : Lựa chọn thông số kỹ thuật phương pháp mã hóa cho phiên bản PHP phù hợpvới nhu yếu sử dụng. Bước 5 : Nhấn nút Encode project như hình để khởi đầu tiến trình mã hóa : Kết quả : Sau khi Encode thành công xuất sắc, chương trình sẽ tạo ra file có nội dungmã hóa tại Output Location : D : \ Temp \ Zend mà tất cả chúng ta đã khai báo trongthông tin Project. 10IV. KẾT LUẬNCàng ngày càng có rất nhiều loại lỗ hổng bảo mật thông tin mạng được tìm ra. Nhớ những tools và công cụ, tất cả chúng ta đã tìm ra những giải pháp tấn cônglỗ hổng đề từ đó tìm những giải pháp khắc phục cho mạng lưới hệ thống mạng Lan củamình. Việc vận dụng những công cụ có sẵn này bất kể người nào cũng hoàn toàn có thể tựtìm tòi và mày mò ra được, tuy nhiên hãy sử dụng nó vào mục tiêu tốt, không nên sử dụngvào mục tiêu xấu và lạm dụng đời sống riêng tư cá thể. Trong đề tài này, mình đã tích lũy được những thông tin trên những forum vàmột số hiểu biết cá thể. Phần setup chạy trực tiếp trên máy và đã thửnghiệm thành công xuất sắc. Tuy nhiên, trong quy trình biên soạn, hoàn toàn có thể kiến thức và kỹ năng còn chưa chuyên sâuvà 1 số ít thông tin tích lũy trên mạng nên việc khám phá còn nhiều thiếu sót, kính mong Quý Thầy Cô và những bạn thông cảm. V. 11T ÀI LIỆU THAM KHẢOTiếng Việt : 1. Hưng Phú, “ Hướng dẫn mã hóa code HTML và PHP ” Link : / > 2. Mr. Toan, “ Tổng hợp những trang mã hóa – giải mã code php ” Link : / > Tiếng Anh : Convert character encoding – PHPLink : / > 12

PHÁT TRIỂN ỨNG DỤNG WEB : MÃ HÓA VÀ GIẢI MÃ TRANG PHP – Tài liệu text

Bài viết liên quan
Hotline 24/7: O984.666.352
Alternate Text Gọi ngay