Tathmini ya PHP formu

Hii la kuanzo huku na kuanzo kilichofuata, huzungumza kuhusu matukio ya kumtumia PHP kumekua data ya foramu.

Tathmini ya PHP formu

Mafanikio:Inafaa kuangalia usalama kwa kumtumia PHP formu!

Makadirio hizi yataonyesha matukio ya kumtumia PHP formu kwa ukubwa wa usalama. Kuwa na uangalifu wa sahihi wa formu ya HTML kwa kusikia wakulima na barua zinaudai zimekuwa muhimu!

Forumi za HTML zetu zina zawadi za input field: field za text zilizotakiwa na zilizokwenda, choo na botton za kusajia:

Foramu inayotumiwa kwa masharti ya tathmini zifuatazo:

Mwako Masharti ya Tathmini
Name Inayotakiwa. Inafaa kuwa na herufi na machafuko.
E-mail Inayotakiwa. Inafaa kuwa na barua pepe ya sahihi (inahesabi @ na .).
Website Inayotakiwa. Ikiwa inafaa kuwa na, lazima iwe na URL sahihi.
Comment Inayotakiwa. Mahali ambapo inafaa kuwa na input text kwa matukio mengi.
Gender Inayotakiwa. Inafaa kuwa na uchaguzi moja.

Sikitiko tukangalia kodini ya HTML ya formu hii kila mara:

Mwako wa text

name, email na website ni viwango vya input text, comment ni kati ya text area. Inayotaka HTML ni kama iliyotakiwa hapa:

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>

Mbinu ya choo

gender ni mbinu ya choo, inayotaka HTML ni kama iliyotakiwa hapa:

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

Mbinu ya formu

Inayotaka HTML ya formu ni kama iliyotakiwa hapa:

Mafanikio:Cross-site scripting (XSS) inaonekana kama sehemu ya uharibifu wa utusafiri wa kompyuta, inayotumika sana katika programu za Web. XSS inaweza kumaliza wasiliana wa msaidizi katika sayari ya mtumiaji mengine.

Kama tunaweza kuwa na ukurudi wa kipindi kwa jina "test_form.php" inayofikia hapa:

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

Sasa, kama mtumiaji anarudi URL ya kawaida inayofikia kwenye barua ya URL: "http://www.example.com/test_form.php", kipindi chifuatayo kilikua kumekadiri kama:

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

Kwenye sasa, yote inafaa.

Inafikia kwamba, kama mtumiaji anasajika URL inayofikia hapa kwenye barua ya URL:

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

Kwenye hali hii, kipindi chifuatayo kilikua kumekadiri kama:

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

Kwenye kipindi hiki kinaongezwa kwa script na kikurusha cha utaratibu. Kwa sababu hii, kama ukuradisha ukurudi wa ukurudi wa sayari, kuuwaada wa JavaScript umeendelea kuwaendelea (mtumiaji anapata jikaze la utaratibu). Hii inaonekana kama kesi ya kwanza kuhusu kama PHP_SELF ni inayotumiwa kwa maelezo kidogo na hatariki.

Unahitaji kuelewa <script> inayotumiaa kuuwaada yote ya JavaScript!黑客能够把用户重定向到另一台服务器上的某个文件,该文件中的恶意代码能够更改全局变量或将表单提交到其他地址以保存用户数据,等等。

如果避免 $_SERVER["PHP_SELF"] 被利用?

通过使用 htmlspecialchars() 函数能够避免 $_SERVER["PHP_SELF"] 被利用。

表单代码是这样的:

;?>">

htmlspecialchars() 函数把特殊字符转换为 HTML 实体。现在,如果用户试图利用 PHP_SELF 变量,会导致如下输出:


无法利用,没有危害!

通过 PHP 验证表单数据

我们要做的第一件事是通过 PHP 的 htmlspecialchars() 函数传递所有变量。

在我们使用 htmlspecialchars() 函数后,如果用户试图在文本字段中提交以下内容:


- 代码不会执行,因为会被保存为转义代码,就像这样:

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

现在这条代码显示在页面上或 e-mail 中是安全的。

在用户提交该表单时,我们还要做两件事:

  1. (通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
  2. (通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\)

Kisha tunapokea kifaa cha kuchaangazia (kama inaonekana kwa kusoma kwa uharibifu, hii inafaa kwa kusaidia kufanya kazi kwa kiasi kikubwa)

Tunaeleza kifaa kwa jina test_input()

Sasa, tunaweza kucheckisha kila kipimo cha $_POST kwa kusaidia kufanya hii: test_input()

Mfano

<?php
// kufaa kipimo na kuzingatia kwa thelathini
$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;
}
?>

Mivuno ya Kufanya

Tukielezea kwa kuangalia mivuno ya mwanzo, tukielezea kama fomu inatumiwa kwa kusema $_SERVER["REQUEST_METHOD"] . Ikiwa REQUEST_METHOD ni POST, fomu inaelewa - na inahitajika kumtumia kumtumia. Ikiwa hayajaelewa, inasifanya kusikia kumtumia kumtumia fomu ya kafaka.

Kwa hivyo, kwenye mivuno ya juu, mengineo yote ya kuingia ni chaguo. Inafaa kwamba mtumishi hauingia data yoyote, skripta inaweza kuendelea kwa kufanya kazi.

Hata hivyo, kwenye mivuno ya juu, tukielezea kama fomu inatumiwa kwa kusema $_SERVER["REQUEST_METHOD"] . Ikiwa REQUEST_METHOD ni POST, fomu inaelewa - na inahitajika kumtumia kumtumia. Ikiwa hayajaelewa, inasifanya kusikia kumtumia kumtumia fomu ya kafaka.