PHP Secure Email
- Previous Page PHP E-mail
- Next Page PHP Error
Mayroong isang bug sa PHP e-mail script sa nakaraang section.
PHP E-mail 注入
Unang-una, tingnan natin ang PHP code sa nakaraang section:
<html> <body> <?php kung may isset($_REQUEST['email']) //Kung ang "email" ay natupad, magpadala ng email { //Magpadala ng email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } else //Kung ang "email" ay hindi natupad, ipakita ang form { echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
Ang problema sa itaas na code ay ang hindi pinagawang gumagamit ay maaaring magdagdag ng data sa header ng email sa pamamagitan ng paggamit ng form.
Kung magdagdag ang gumagamit ng mga teksto sa input box ng form, ano ang mangyayari?
someone@example.com%0ACc:person2@example.com %0ABcc:person3@example.com,person3@example.com, anotherperson4@example.com,person5@example.com %0ABTo:person6@example.com
Kung paano, ang mail() function ay naglalagay ng teksto sa itaas ng header ng email, kaya ngayon mayroon pang karagdagang mga field na Cc:, Bcc:, at To:. Kapag inililipat ng user ang submit button, ang email na ito ay mailahat sa lahat ng mga address na ito!
PHP na nag-iwas sa E-mail Injection
Ang pinakamahusay na paraan upang maiwasan ang e-mail injection ay ang pagpapatunay ng input.
Ang mga sumusunod na code ay katulad ng nakaraang section, ngunit nadagdagan na namin ang programang pagpapatunay ng input ng email field sa form:
<html> <body> <?php function spamcheck($field) { //filter_var() naglalinis ng e-mail //address gamit FILTER_SANITIZE_EMAIL $field=filter_var($field FILTER_SANITIZE_EMAIL); //filter_var() nagpapatunay ng e-mail //address gamit FILTER_VALIDATE_EMAIL kung filter_var($field FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } } kung may isset($_REQUEST['email']) //kung naipunan ang "email", magpatuloy //tiningnan kung ang email address ay hindi wasto $mailcheck = spamcheck($_REQUEST['email']); kung FALSE ang $mailcheck) { echo "Invalid input"; } else //magpadala ng email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } } else //if "email" is not filled out, display the form echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
In the above code, we used PHP filters to validate the input:
- FILTER_SANITIZE_EMAIL Removes Illegal Characters from Email String
- FILTER_VALIDATE_EMAIL Validates Email Address
You can find more about our PHP FiltersRead more about filters in this section.
- Previous Page PHP E-mail
- Next Page PHP Error