Kuandika PHP Salama: Mbinu 10 Tunazotumia Kila Mradi
PHP inaendeshwa na sehemu kubwa ya wavuti, na hilo pia inafanya iwe lengo lapendwa. Hizi ni tabia zinazoweka mifumo tunayojenga nje ya ripoti za uvujaji.
Mara nyingi matatizo ya usalama wa PHP si ya kipekee. Ni makosa machache yaleile, yanayorudiwa. Baada ya kujenga mifumo ya biashara, majukwaa ya hospitali na API, hizi ni mbinu tunazozichukulia kama zisizoweza kukosekana.
1. Tumia prepared statements daima
Usijenge SQL kwa kuunganisha kamba. Kwa PDO inaonekana hivi:
$stmt = $pdo->prepare('SELECT * FROM patients WHERE hospital_no = :no');
$stmt->execute(['no' => $hospitalNo]);
$patient = $stmt->fetch();
Prepared statements hutenga msimbo na data, na kwa hivyo huondoa sindano ya SQL kama aina ya hitilafu badala ya hatua kwa hatua ya hatari.
2. Hati neno la siri kwa password_hash
Usiandike hati yako mwenyewe, na usitumie md5 au sha1 kwa neno la siri.
$hash = password_hash($password, PASSWORD_DEFAULT);
password_verify($inputPassword, $hash); // boolean
PASSWORD_DEFAULT kwa sasa inamaanisha bcrypt na itahamia kwa algorithm zenye nguvu zaidi kadiri muda unavyosogea. Hati zilizopo zinaendelea kuthibitishwa, na unaweza kufanya upya kuingia kukibadilika kwa gharama.
3. Epuka matokeo, si ingizo
echo htmlspecialchars($userInput, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
Hifadhi data kama inavyofika; epuka mahali inapotolewa. Kuepuka kwenye ingizo huharibu data, kuepuka kwenye matokeo huzuia XSS.
4. Thibitisha kwa orodha za kuruhusu
Kagua kuwa thamani ni moja ya thamani unazotarajia, badala ya kuzuia zile unazogopa.
$allowed = ['reception', 'clinician', 'lab', 'pharmacy'];
if (!in_array($role, $allowed, true)) {
http_response_code(400);
exit('Invalid role');
}
5. Sanidi vipindi vizuri
session_set_cookie_params([
'httponly' => true,
'secure' => true,
'samesite' => 'Lax',
]);
session_start();
Tengeneza upya kitambulisho cha kipindi baada ya kuingia ili kuzuia kufungwa kwa kipindi.
6. Linda fomu kwa tokeni za CSRF
Kila ombi linalobadilisha hali linapaswa kubeba tokeni inayohusishwa na kipindi cha mtumiaji, iliyothibitishwa kwa kulinganisha kwa muda thabiti.
7. Usiwahi kufichua nywila
Nywila za hifadhidata, funguo za API na tokeni zinafaa kuwa kwenye vigezo vya mazingira au faili nje ya mzizi wa wavuti. Faili moja la .env linalotolewa kama maandishi kwa bahati mbaba limevuja hifadhidata za uzalishaji zaidi ya mbinu yoyote ya kisasa.
8. Chukulia upakiazi kama wa uadui
Thibitisha aina ya MIME na ugani, hifadhi nje ya mzizi wa wavuti au toa kupitia kidhibiti, tengeneza majina ya nasibu, na usiwahi kutekeleza chochote kutoka saraka ya upakiazi.
9. Zima ripoti ya makosa kwenye uzalishaji
Onyesha watumiaji ukurasa wa kirafiki; rekodi maelezo kwa faragha. Nyayo za mzigo kwenye uzalishaji ni ramani ya bure ya mfumo wako wa faili.
10. Weka kikomo cha uthibitishaji
Weka kikomo cha majaribio ya kuingia kwa kila akaunti na kila IP, ongeza kurudi nyuma kwa kiwango kinachokua, na rekodi makosa. Ulinzi dhidi ya nguvu si ya hiari kwa paneli za utawala.
Hakuna hii inayochanganya. Ni nidhamu tu. Mifumo tunayojenga huchukulia hizi kama chaguomsingi, na mazungumzo ya matengenezo baadaye ni mafupi zaidi kwa sababu hiyo.