Pagsusuri ng PHP Porma

Ito ang pangkat at ang susunod na kabanata ay nagtuturo kung paano gamitin ang PHP upang patunayan ang datos ng porma.

Pagsusuri ng PHP Porma

Mga tip:Pansin ang seguridad kapag pinapagamit ang PHP porma!

Ang mga pahinang ito ay magpapakita kung paano ligtas na paghawakan ang PHP porma. Ang wastong pagsusuri ng datos ng HTML porma ay napakahalaga sa pag-iwas sa hacker at spam email!

Ang HTML porma na magiging gamit namin sa hinaharap ay mayroong iba't ibang input field: mandahil at opisyal na teksto field, radio button at button ng sumite:

Ang porma na ito ay gumagamit ng sumusunod na patakaran ng pagsusuri:

Field Patakaran ng Pagsusuri
Name Mandahil. Dapat mayroon itong mga titik at espasyo.
E-mail Mandahil. Dapat mayroon itong wastong email address (kasama ang @ at .).
Website Opisyal. Kung napili, dapat na mayroon itong wastong URL.
Comment Opisyal. Ilang panghuling input field (text box).
Gender Mandahil. Dapat magpili ng isang bagay.

Unang tingnan natin ang purong HTML code ng porma na ito:

Teksto field

Ang name, email at website ay mga elemento ng teksto, ang comment field ay isang text box. Ang HTML code ay gayon ang ganito:

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

Radio button

Ang gender field ay isang radio button, ang HTML code ay gayon ang ganito:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male

Elemento ng porma

Ang HTML ng porma ay gayon ang ganito:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>

Kapag isinasubmit ang porma na ito, ang datos ng porma ay nagpadala sa pamamagitan ng method="post".

Ano ang $_SERVER["PHP_SELF"] variable?

$_SERVER["PHP_SELF"] ay isang superglobal variable na nagbibigay ng pangalan ng file ng kasalukuyang ekelikadong script.

Kaya, $_SERVER["PHP_SELF"] ay nagpadala ng datos ng porma sa sariling pahina, hindi sa ibang pahina. Ganito, ang gumagamit ay makakakuha ng impormasyon ng mensahe ng error sa pahina ng porma.

Ano ang function na htmlspecialchars()?

Ang function na htmlspecialchars() ay nagbabagong mga espesyal na character sa HTML entity. Ito nangangahulugan na ang HTML character tulad ng < at > ay mapalitan ng < at > . Ito ay nagbibigay ng kapangyarihan sa attackers na hindi makakuha ng kapakinabangan sa pamamagitan ng pag-inject ng HTML o JavaScript code (cross-site scripting attack) sa code.

Mga mahalagang tip tungkol sa seguridad ng form sa PHP

Ang variable na $_SERVER["PHP_SELF"] ay maaaring gamitin ng hacker!

Kung gumagamit ang iyong pahina ng PHP_SELF, maaaring ipasok ng user ang underscore at magsagawa ng cross-site scripting (XSS).

Mga tip:Ang cross-site scripting (XSS) ay isang uri ng katiwasayang kompyuter, pangkaraniwan sa mga Web application. Ang XSS ay nagbibigay ng kapangyarihan sa attacker na ipasok ang client-side script sa mga pahina na binibigay ng iba pang mga user.

Ang ipinaghahalintulad namin ay isang pahina na may form na may pangalang "test_form.php":

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Ngayon, kung naipasok ng user ang normal na URL sa address bar: "http://www.example.com/test_form.php", ang nakaraang code ay magiging:

<form method="post" action="test_form.php">

Hanggang ngayon, lahat ay normal.

Gayunpaman, kung nagsipasok ng URL sa address bar ang user na:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

Sa ganitong sitwasyon, ang nakaraang code ay magiging:

<form method="post" action="test_form.php"/><script>alert('hacked')</script>

Ang kodong ito ay nagdagdag ng isang script at isang utos ng paalala. At kapag na-load ang pahina, ang JavaScript code ay magsasakto (makikita ng user ang isang boks ng paalala). Ito ay isang simple at walang kapinsala na halimbawa ng kung paano ginagamit ang PHP_SELF variable.

Dapat mo ring malaman Ang <script> tag ay nagbibigay ng kapangyarihan na magdagdag ng anumang JavaScript code!Ang hacker ay makakapaglilipat ng user sa ibang server at may isang file na may masamang code na mababago ang mga global variable o isumite ang form sa ibang address upang isalba ang datos ng user, at iba pa.

Paano maiwasan ang paggamit ng $_SERVER["PHP_SELF"]?

Maaaring maiwasan ang paggamit ng $_SERVER["PHP_SELF"] sa pamamagitan ng paggamit ng function na htmlspecialchars().

Ang code ng form ay gayon:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Ang function na htmlspecialchars() ay nagbabago ng mga espesyal na character sa entity na HTML. Ngayon, kapag tinatangkang gamitin ng user ang variable na PHP_SELF, magiging tulad ng sumusunod ang output:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>">

Hindi mapagamit, walang pinsalang kalusugan!

Pagsuri ng form data sa pamamagitan ng PHP

Ang una namin na gagawin ay ipasok ang lahat ng variable sa function na htmlspecialchars() ng PHP.

Kapag tinatangkang isumite ng user ang sumusunod sa teksto field, pagkatapos gumamit ng function na htmlspecialchars():

<script>location.href('http://www.hacked.com')</script>

- Ang code ay hindi gagawin dahil ito ay nakaimbak bilang escaped code, tulad nito:

<script>location.href('http://www.hacked.com')</script>

Ngayon ang code ay ligtas kapag ipinapakita sa web page o sa email.

Kailangan namin ginagawa dalawang bagay kapag inilabas ng user ang form:

  1. (Sa pamamagitan ng PHP trim() function) alisin ang walang kabuluhan na mga character sa mga ipinasok na datos ng user (mga labis na espasyo, tab, at linya)
  2. (Sa pamamagitan ng PHP stripslashes() function) alisin ang bawat balewalain na backslash (\) sa mga ipinasok na datos ng user

Susunod namin ay gumawa ng isang function na suriin (mas mahusay ang kahusayan kaysa sa pagkakaroon ng maraming magkakahiwalay na script).

Binabansagan namin ang function na test_input().

Ngayon, nagagamit namin ang function na test_input() upang suriin ang bawat $_POST variable, ang script ay gayon:

Sample

<?php
// Tulungan ang variable at itong itaas bilang walang halaga
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

Run Instance

Pansin na sa simula ng script, pinagtingnan naming kung ang form ay isinumite gamit ang $_SERVER["REQUEST_METHOD"]. Kung ang REQUEST_METHOD ay POST, ang form ay isinubmit - at dapat itong suriin. Kung hindi isinubmit, lumisan ang suriin at ipakita ang isang bakanteng form.

Gayunman, sa halimbawa na ito, ang lahat ng input field ay可选的. Kahit hindi na ipinaisa ng user anumang datos, ang script ay makakaraan ng maayos.

Ang susunod na hakbang ay gumawa ng required input field at lumikha ng error message na kailangan gamitin.