09/10/2018, 23:28
Vào cuộc cùng PHP&MySQL
mình mới bắt đầu mò mẫm PHP nên viết bài này xin tham khảo các cao thủ trên DDTH về tất cả tư duy lập trình, cách thức bảo mật, để ngắn gọn Lê Minh xin hỏi thẳng và mong được trả lời nhanh. Thanks!
- Vấn đề 1:
Lệnh và hàm trong php - Dấu ' và dấu "" dùng cái nào và khi nào dùng từng cái... hay không dùng?
Example:
Dùng
include(function.php); //cái dấu cách ở chỗ include kia cũng đang băn khoăn include(); hay include cách ra một cái rồi mới (); ???
Hay
- Vấn đề 2:
Để hiểu được include
Minh có 3 file: index.php, function.php, main.php làm sao để include cho đúng, load nhanh nhất? File main.php cần gọi cả hàm trong file function.php
+ TH1: include file function.php vào file index.php và không cần include file function.php vào file main.php
hay phải include file function.php vào file main.php nữa mới đúng?
- Vấn đề 3: Cách thức xây dựng chương trình (xin các bạn chia sẻ kinh nghiệm)
Các cách đơn giản:
+ Cách 1:
hay chơi theo kiểu PHPNuke?
- Vấn đề 4: Bảo mật SESSION & COOKIE
Chỉ đơn giản là gán cái $_SESSION[dadangnhap] bằng 1 và $_SESSION[memberdangnhapid] == $memberid; như vậy sao? Mức độ an toàn của nó là bao nhiêu %
Mới chỉ bắt đầu nên cần hỏi cho kĩ (đã nhận project của công ty rồi. hix) mình mong được học hỏi từ những chỉ bảo của các bạn
Cám ơn rất nhiều!
- Vấn đề 1:
Lệnh và hàm trong php - Dấu ' và dấu "" dùng cái nào và khi nào dùng từng cái... hay không dùng?
Example:
Dùng
PHP Code:
<?php
echo '<a href="index.php"> Trang Chu </a>';
?>
PHP Code:
<?php
include
?>
PHP Code:
<?php
echo "<a href="index.php"> Trang Chu </a>";
?>
PHP Code:
include ('function.php');
PHP Code:
include ("function.php");
Để hiểu được include
Minh có 3 file: index.php, function.php, main.php làm sao để include cho đúng, load nhanh nhất? File main.php cần gọi cả hàm trong file function.php
+ TH1: include file function.php vào file index.php và không cần include file function.php vào file main.php
PHP Code:
<?php
//index.php
include ("function.php");
include ("main.php"); // luc này những function trong file function.php có include vào trong file main.php hay ko nhỉ? PHP phiên bản nào không dùng được?
?>
PHP Code:
// index.php
include ("function.php");
include ("main.php");
PHP Code:
//main.php
include ("function.php");
- Vấn đề 3: Cách thức xây dựng chương trình (xin các bạn chia sẻ kinh nghiệm)
Các cách đơn giản:
+ Cách 1:
PHP Code:
<?php
if ($_GET***91;action***93; == 'nghenhac')
{
include ('nghenhac.php');
}
else if ($_GET***91;action***93; == 'dangki')
{
include ('dangki.php');
}
...
else
{
include ('main.php');
}
?>
PHP Code:
<?php
function nghenhac(); {}
function dangki(); {}
...
switch case // cái này po' tay vì chưa ngâm cứu
?>
PHP Code:
<?php
// đây chỉ là ví dụ
if ($dangnhap = 1)
{$_SESSION***91;dadangnhap***93; == 1;
$_SESSION***91;memberdangnhapid***93; == $memberid;
}
else
{
echo 'Sai thông tin';
}
?>
Mới chỉ bắt đầu nên cần hỏi cho kĩ (đã nhận project của công ty rồi. hix) mình mong được học hỏi từ những chỉ bảo của các bạn
Cám ơn rất nhiều!
Bài liên quan
[Bác này thích thử thách hay muốn bán đứng uy tín của mình nhỉ]
Nói chung là thế này:
Google: coding style
Google: php security , sqlinjection
PHP manual, ebook php security.
Class , OOP, Framework.
Ngâm kíu cách sử lí của mấy cái source của nước ngoài í [ chẳng hạn vbBuletin, phpBB ... ]
Bạn giúp mình với được không? Project đơn độc một mình mình, bắt đầu PHP cách đây 2 ngày, đang tham khảo PHPNuke & VBB nhưng thấy 2 cái này đã khác nhau nhiều chỗ, cẩn thận nên mới post vài vấn đề nho nhỏ đang thắc mắc lên hỏi các bạn. Nguyên tắc là chắc chắn ngay từ đầu nên bạn giải quyết mình vài vấn đề trên kia với, Thanks!
Vấn đề 2: Có điên mới làm như vậy, include thì include 1 lần thôi, nhiều lần nó điên lên đấy
Vấn đề 3: Cách một nhanh hơn và tiện hơn vì dùng cái nào thì gọi cái đó, không phải thừa bộ nhớ ra.
Vấn đề 4: SESSION an toàn 98%
Kiến thức tôi có lẽ đã cũ, sai không chịu trách nhiệm đâu nha
- Đơn giản bạn cứ hiểu nó lưu thành một hash table như sau $SESSION["Giá trị cookie (mặc định giá trị của PHPSESSID)"][pt biến].
-- Hổng biết phải hông nữa. Nghĩ vậy thôi nha.
Mình đang thắc mắc ở chỗ này nữa nên xin được hỏi tiếp:
- Thông thường để update thông tin cá nhân (ví dụ change password) ở các forum mình thấy dùng đến 2 cái $_GET, giả sử $_GET[action] == 'changepass' và $_GET[action] == 'updatepass' cộng với 1 form lấy biến $_POST. Mình luôn cố gắng làm sao để source đơn giản, load nhanh và tối ưu nhất nên chỉ sử dụng 1 cái $_GET[action] == 'changpass' để thực hiện cùng lúc 2 công việc kiểm tra thông tin và update nó vào database. Mình viết thử nhé:
<?php
$memid = $_SESSION***91;'loggedid'***93;;
function locthongtin();
{
// phần này là nội dung của hàm lọc thông tin từ $_POST vì hơi dài nên mình không viết, chắc các bạn ở đây rành về nó rồi
}
$oldpass = locthongtin($_POST***91;oldpass***93;);
$newpass = locthongtin($_POST***91;newpass***93;);
$renewpass = locthongtin($_POST***91;renewpass***93;);
$oldpassmd5 = md5($oldpass);
$newpassmd5 = md5($newpass);
$sql = mysql_resul(mysql_query("SELECT pass FROM members WHERE id = $memid")) or die (mysql_error());
while ($row = mysql_fetch_array($sql))
{
$oldpass1md5 = $row***91;pass***93;; // chú ý cả số 1
}
if (!$oldpass || !$newpass || !$renewpass || ($newpass != $renewpass) ||($newpass < 6) || ($newpass > 32) || ($oldpassmd5 != $oldpass1md5))
{
// kiểm tra thông tin phân ra từng trường hợp
if (!$oldpass || !$newpass || !$renewpass)
{
echo 'Để đổi mật khẩu bạn cần nhập đầy đủ thông tin vào các ô bên dưới'; // câu này là mấu chốt của vấn đề
}
else if (($newpass < 6) || ($newpass > 32))
{
echo 'Mật khẩu mới quá ngắn, hợp lệ từ 6 -> 32 kí tự';
}
else if ($newpass != $renewpass)
{
echo 'Hai lần mật khẩu mới nhập vào không giống nhau';
}
else if ($oldpassmd5 != $oldpass1md5)
{
echo 'Sai mật khẩu cũ';
}
// Không biết còn thiếu trường hợp nào không? Các bạn góp ý giùm. Mà cũng chưa hiểu lắm, cái else if cuối sao không là else nhỉ???
// form nhập pass cho nó vào đây luôn.
echo '<form name="form" method="POST" action="">'; // Bỏ trống cái action ở đây rồi hidden ở dưới thấy vẫn được nên để luôn cho đẹp URL, run tốt trên PHP5
echo '<input type="hidden" name="'$_SERVER***91;'PHP_SELF'***93;'" value="changepass">';
echo '<input type="password" name="oldpass"> <br />';
echo '<input type="password" name="newpass"> <br />';
echo '<input type="password" name="renewpass"> <br />';
echo '<input type="submit" value="Hoan Thanh">';
// Nếu thông tin không hợp lệ thì cái form này phải vẫn còn, ngoài ra update pass bên dưới
}
else
{
$result = mysql_query("UPDATE members SET pass = $newpassmd5") or die (mysql_error());
echo 'Đổi mật khẩu thành công, xin chúc mừng ku Te`o ^&^';
}
?>
- Ý của mình: Khi gọi cái $_GET[changepass] thì cái đoạn trên kia nó đã chạy rồi (nhược điểm chỗ này đây) và câu thông báo là cái if đầu tiên. Nếu có bất kì lỗi nào thì thông báo và vẫn cho ra cái form để nhập lại pass còn không thì OK. Mình thấy vẫn dùng được và tiết kiệm được một cái $_GET nên hỏi thử xem có gì được và không được mong các bạn góp ý.
- Tiện thể xin hỏi luôn cách viết mã như trên có ổn không? Máy ở nhà viết chỉ khác là dùng Notepad++ và tab mấy cái cho dễ nhìn. Cám ơn các bạn rất nhiều!
<input type="hidden" name="'$_SERVER***91;'PHP_SELF'***93;'" value="changepass">
@terafunny: Cái signature của bạn khó hiểu quá
Phá vỡ tất cả các nổ lực về bảo mật !
Vứt một trong những tính chất căn bản nhất của PHP vào sọt rác !
Phủ nhận hoàn toàn công lao và tâm huyết của các nhà phát triển PHP !
Just kidding ! Nhưng bác nên học lại PHP
___________
Trong các gói phần mềm bằng PHP như forum, CMS... thì session thường ít được sử dụng bởi nó bị phụ thuộc quá nhiều vào cấu hình của PHP. Cookie thì không bị điều đó