2014-02-08 16 views
2

我已經使用Bootstrap製作了一個html表單。我已經使用「必需」來確保數據填入要提交表單的某些字段中。這種形式轉到一個php腳本,它打開一個數據庫連接,根據提交的表單輸入值,指向一個感謝頁面並關閉連接。Bootstrap HTML + MySQL PHP Form安全性

它是我的第一手編碼形式,我關心的是安全性。我如何阻止黑客/垃圾郵件發送者?

你可以指出,拜託,我的代碼的問題,所以我可以在我把這個活的解決這些問題。請溫柔,我是一個擁有大約3個月編碼經驗的新手。

請注意,原來的形式居然有9場,但我忽略它假定這些細節不會是必要的討論。

HTML代碼

<form class="form-horizontal" method="post" action="vacancy.php"> 
    <div class="form-group"> 
    <label for="company" class="col-sm-3 control-label">Company Name *</label> 
     <div class="col-sm-6"> 
     <input type="text" name="company" class="form-control" placeholder="Enter Company Name" required /> 
     </div> 
    </div>  
    <div class="form-group"> 
    <label for="contactperson" class="col-sm-3 control-label">Contact Person *</label> 
     <div class="col-sm-6"> 
     <input type="text" name="contactperson" class="form-control" placeholder="Enter Full Name" required /> 
     </div> 
    </div> 
    <div class="form-group"> 
    <label for="designation" class="col-sm-3 control-label">Designation *</label> 
     <div class="col-sm-6"> 
     <input type="text" name="designation" class="form-control" placeholder="Enter Designation" required /> 
     </div> 
    </div> 
    <div class="form-group"> 
    <div class="col-sm-offset-3 col-sm-6"> 
     <button type="submit" class="btn btn-primary">Submit</button> 
     <button type="reset" class="btn btn-default">Clear</button> 
    </div> 
    </div> 
</form> 

PHP代碼

<?php 
    $con=mysqli_connect("localhost","db2u","password","db2"); 
    if (mysqli_connect_errno()) 
    { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
    $sql="INSERT INTO vacancy (Company, ContactPerson, Designation) 
    VALUES 
    ('$_POST[company]','$_POST[contactperson]','$_POST[designation]')"; 
    if (!mysqli_query($con,$sql)) 
    { 
     die('Error: ' . mysqli_error($con)); 
    } 
    header("Location: thankyou.html"); 
    mysqli_close($con); 
?> 

編輯:這麼看來,我需要驗證。我看着jqBootstrapValidation。即使考慮htmlspecialchars(哪一個更容易)。我相信兩人都會做同樣好的工作嗎?目前PDO對我來說有點太過分了。

+0

我沒有看太密切的代碼,但沒有輸入驗證。基本上,現在你允許任何人輸入任何東西,包括會危及你的數據庫的東西等。它是一個很大的話題,但你可以通過使用一個框架,比如codeigniter,爲你做很多這些東西,或者獲得一本書用一些模板代碼。 O'Reilly的一個叫做html php和mysql的東西是一個很好的開始。的 – EnduroDave

+0

可能重複[我怎樣才能防止在PHP中SQL注入?]他已經在使用的MySQLi(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – Gumbo

回答

0

永遠不要相信用戶輸入。您應該使用mysqli_real_escape_string()函數來轉義字符串。 http://www.php.net/manual/en/mysqli.real-escape-string.php

$company = mysqli_real_escape_string($_POST[company]);

$contactperson = mysqli_real_escape_string($_POST[contactperson]);

$designation = mysqli_real_escape_string($_POST[designation]);

$sql="INSERT INTO vacancy (Company, ContactPerson, Designation) VALUES ('$company','$contactperson','$designation')";

+0

我也建議執行某種驗證。用戶輸入是否有意義?例如。在將其寫入數據庫之前,檢查給定的電子郵件地址是否處於有效格式。 – mwallisch

+0

我試了這個... – TheAllSeeingI

+0

當我這樣做(我記得早些時候也嘗試過),我的桌子是空的。 ID計數器增加但沒有數據。 – TheAllSeeingI

0

你有沒有在你的PHP代碼驗證的任何領域, 你應該把驗證在PHP文件太多,任何用戶都可以從輸入中刪除「必需」,並可以發佈數據。