首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不太懂SQL注入

不太懂SQL注入
EN

Stack Overflow用户
提问于 2012-09-02 05:41:41
回答 3查看 231关注 0票数 4

我读过很多关于sql的文章,我理解它是如何引起问题的(比如,删除表、____等等)。但我不确定我所遵循的教程是如何防止这种情况发生的。我只是在学习PDO,我想我理解它。

这段代码不受SQL注入的影响吗?,为什么是?(使用这些准备好的语句需要更多的工作,所以我想确定我不仅仅是在浪费时间--,如果代码可以改进,请告诉我!)

代码语言:javascript
复制
$conn = new PDO("mysql:host=$DB_HOST;dbname=$DB_DATABASE",$DB_USER,$DB_PASSWORD);

// Get the data
$firstname = $_POST["v_firstname"];
$lastname =  $_POST["v_lastname"];
$origincountry =  $_POST["v_origincountry"];
$citizenship = $_POST["v_citizenship"];
$gender = $_POST["v_gender"];
$dob = $_POST["v_dob"];
$language = $_POST["v_language"];
$landing = $_POST["v_landing"];
$email = $_POST["v_email"];
$phone = $_POST["v_phone"];
$cellphone = $_POST["v_cellphone"];
$caddress = $_POST["v_caddress"];
$paddress = $_POST["v_paddress"];
$school = $_POST["v_school"];
$grade = $_POST["v_grade"];
$smoker = $_POST["v_smoker"];
$referred = $_POST["v_referred"];
$notes = $_POST["v_notes"];


//Insert Data
$sql = "INSERT INTO clients (firstname, lastname, origincountry, citizenship, gender, dob, language, landing, email, phone, cellphone, caddress, paddress, school, grade, smoker, referred, notes) 
        VALUES (:firstname, :lastname, :origincountry, :citizenship, :gender, :dob, :language, :landing, :email, :phone, :cellphone, :caddress, :paddress, :school, :grade, :smoker, :referred, :notes)";
$q = $conn->prepare($sql);
$q->execute(array(':firstname'=>$firstname,
                  ':lastname'=>$lastname,
                  ':origincountry'=>$origincountry,
                  ':citizenship'=>$citizenship,
                  ':gender'=>$gender,
                  ':dob'=>$dob,
                  ':language'=>$language,
                  ':landing'=>$landing,
                  ':email'=>$email,
                  ':phone'=>$phone,
                  ':cellphone'=>$cellphone,
                  ':caddress'=>$caddress,
                  ':paddress'=>$paddress,
                  ':school'=>$school,
                  ':grade'=>$grade,
                  ':smoker'=>$smoker,
                  ':referred'=>$referred,
                  ':notes'=>$notes));
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-02 05:48:26

是的,代码是安全的,因为PDO将正确地转义并为您引用参数数组。

票数 4
EN

Stack Overflow用户

发布于 2012-09-02 07:30:52

您的代码在SQL注入中是安全的,因为您使用的是参数化查询,这基本上意味着,一旦构建了查询并将其发送到sql服务器,它就会被转义,使用php内置的函数mysql_real_escape_string()也可以实现这一点。

下面的视频是关于来自OWASP的sql注入的非常好的信息视频:SQL注入

票数 1
EN

Stack Overflow用户

发布于 2012-09-02 06:00:40

规则是:不要手工构造sql,在这种情况下,您可以执行如下操作:

代码语言:javascript
复制
sqlStatement = 'select field1, field2, field3 from mytable where index = '' + myVariable + ''

以上情况很危险,因为如果应用程序允许用户将数据传递到myVariable,他们可能会向数据库服务器发送完整的SQL命令。

正如上面所做的那样,使用参数化查询是解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12233703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档