Ajax POST / GET安全性

时间:2011-12-08 03:24:27

标签: mysql ajax security post get

我正在使用ajax,php和mysql构建一种crm。我正在使用ajax xhr请求使用GET和POST请求构建解决方案。我的问题是,确保这些请求对任何类型的黑客或攻击都是安全的最佳方法是什么。我想确保我的客户数据和这个crm是安全的。

现在我只是使用长手ajax / javascript。我没有使用太多jquery:我的请求看起来像这样:

 function getContacts()
 {

if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
     document.getElementById("div").innerHTML=xmlhttp.responseText;
      }
   }
 xmlhttp.open("POST","xhr_php/getContacts.php",true);
 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
 var contact = document.getElementById('contact_id').value;
 xmlhttp.send("contact="+contact);
 }  

我的php文件看起来像这样

$contact=$_POST['contact'];

$sql="SELECT * 
      FROM contacts 
      WHERE contacts.contact_id = $contact"; 

所以这是我用来不仅检索数据而且插入记录和运行所有其他查询的基本方法。我的问题是什么是保护这些请求和SQL查询的最佳方法,以便所有数据都是安全的。我想确保这是一个安全的crm解决方案,以便数据不会被破坏,被盗,注入,被黑客攻击等。感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

这不安全;它容易受到SQL注入攻击,这与Ajax,POST或GET无关。您不应该以这种方式构建SQL语句。您的问题不太适合Stack Overflow - “如何使我的代码安全”是一个无法以简单方式回答的大量主题。如果你是以专业的身份构建这个,请找一个更高级的开发人员来帮助你 - 如果你正在制作基本的SQL注入错误,那么你很可能不能自己构建一个完整的CRM包保证安全。

答案 1 :(得分:0)

您应该使用PDO。以下是示例代码。你可以根据需要修改它。

$host  = 'localhost'; 
$dbname = 'contacts';
$username = 'anyuser';
$password = 'your password';

$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

//If contact is int value then pass it through intval function
$contact=intval($_POST['contact']);

$sql = 'SELECT * FROM contacts WHERE contacts.contact_id = :contact_id';
$statement = $conn->prepare($sql);
$statement->bindParam(':contact_id', $contact, PDO::PARAM_INT);
$statement->execute();
//Use $result is your page
$result = $statement->fetch(PDO::FETCH_ASSOC);

您也可以使用PDO插入/更新

$stmt = $conn->prepare("INSERT INTO Table  (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
$stmt->execute();

希望这有帮助。

答案 2 :(得分:-3)

这应该不受sql注入的影响:

$contact=intval($_POST['contact']);

$sql="SELECT * 
  FROM contacts 
  WHERE contacts.contact_id = $contact";

mysql_query($sql);