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
PHP Code:
<?php
echo '<a href="index.php"> Trang Chu </a>';
?>
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 (); ???
PHP Code:
<?php
include
?>
Hay
PHP Code:
<?php
echo "<a href="index.php"> Trang Chu </a>";
?>
PHP Code:
include ('function.php'); 
PHP Code:
include ("function.php"); 
- 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
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?
?>
hay phải include file function.php vào file main.php nữa mới đúng?
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');
}
?>
hay chơi theo kiểu PHPNuke?
PHP Code:
<?php
function nghenhac(); {}
function 
dangki(); {}
...
switch case  
// cái này po' tay vì chưa ngâm cứu
?>
- Vấn đề 4: Bảo mật SESSION & COOKIE
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';
}
?>
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!
conan1212 viết 01:40 ngày 10/10/2018
Liều, chưa good PHP mà đã dám nhận project
[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 ... ]
Lê Minh Online viết 01:38 ngày 10/10/2018
Quote Được gửi bởi conan1212 View Post
Liều, chưa good PHP mà đã dám nhận project
[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 ... ]
Sẽ không bao giờ có chuyện bán đứng uy tín, thích thử thách hay hơn !

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!
terafunny viết 01:38 ngày 10/10/2018
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?
Đối với nháy đơn, mọi thứ chứa trong đó đều sẽ là chuỗi, còn nháy kép thì cho phép sử dụng biến, hàm, hằng trong đó. Tốt nhất là nên phân cách ra bằng dấu chấm.

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
Lê Minh Online viết 01:31 ngày 10/10/2018
Quote Được gửi bởi terafunny View Post
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
Bạn có thể chia sẻ nhiều hơn kinh nghiệm về nó không? Mình vẫn băn khoăn về nó, trên một trình duyệt user được phép login bằng nhiều account khác nhau??? Các ngôn ngữ viết web khác (ASP, JSP, CGI...) cũng như vậy hả bạn?
lephap99 viết 01:39 ngày 10/10/2018
Quote Được gửi bởi Lê Minh Online View Post
Bạn có thể chia sẻ nhiều hơn kinh nghiệm về nó không? Mình vẫn băn khoăn về nó, trên một trình duyệt user được phép login bằng nhiều account khác nhau??? Các ngôn ngữ viết web khác (ASP, JSP, CGI...) cũng như vậy hả bạn?
- Không biết có phải bạn hỏi về SESION không ? Biến này hoạt động khá đơn giản. mỗi phiên làm việc sẽ lưu 1 biến cookie tại client và cookie này sẽ cho cho biết là các biến session nào đựoc lưu trên server với giá trị nào.
- Đơ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.
Lê Minh Online viết 01:38 ngày 10/10/2018
Quote Được gửi bởi lephap99 View Post
- Không biết có phải bạn hỏi về SESION không ? Biến này hoạt động khá đơn giản. mỗi phiên làm việc sẽ lưu 1 biến cookie tại client và cookie này sẽ cho cho biết là các biến session nào đựoc lưu trên server với giá trị nào.
- Đơ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.
Cám ơn bạn rất! Mình đang nghiên cứu $_SESSION chứ chưa biết $_COOKIE là gì cả, như bạn nói ở trên là dùng kết hợp cả $_SESSION và $_COOKIE, như vậy có rắc rối hơn, có bảo mật tốt hơn nhiều không?

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 Code:
<?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 ^&^';
}

?>
Đang ngồi ngoài tiệm net nên type khó tránh khỏi thiếu xót (xót tiền nên type phải nhanh ) nhưng chắc cao thủ ở đây có thể hiểu những gì mình muốn nói.

- Ý 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!
terafunny viết 01:30 ngày 10/10/2018
@Lê Minh Online: Bạn đừng nên dùng elseif trong cái kiểm tra lỗi nhập pass. Vì như vậy sẽ không thấy được nhiều lỗi cùng xuất hiện. Lấy ví dụ nếu tôi nhập pass quá ngắn và 2 cái pass kia không trùng nhau thì chỉ thấy được cái thông báo là pass quá ngắn.

PHP Code:
<input type="hidden" name="'$_SERVER***91;'PHP_SELF'***93;'" value="changepass"
Chỗ này nên lọc kí tự nếu không muốn bị XSS
Lê Minh Online viết 01:37 ngày 10/10/2018
Mình hiểu chỗ đó 1 lỗi hay nhiều lỗi thì vẫn là lỗi và không được chấp nhận tuy nó không được thật sự chuyên nghiệp nhưng lại tiết kiệm được một cái $_GET. Bạn có cách nào hay hơn không share mình đi hoặc đưa ra lí do nào khác thuyết phục được ý kiến chủ quan của mình.

Chỗ này nên lọc kí tự nếu không muốn bị XSS
XSS là gì vậy bạn (mình newbie mà)?

@terafunny: Cái signature của bạn khó hiểu quá
mr47 viết 01:29 ngày 10/10/2018
Quote Được gửi bởi lephap99 View Post
- Không biết có phải bạn hỏi về SESION không ? Biến này hoạt động khá đơn giản. mỗi phiên làm việc sẽ lưu 1 biến cookie tại client và cookie này sẽ cho cho biết là các biến session nào đựoc lưu trên server với giá trị nào.
- Đơ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.
ạk ạk bác vừa thay đổi định nghĩa của internet
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 đó
Bài liên quan
0