首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使我的变量对于数据库插入是安全的?

问如何使我的变量对于数据库插入是安全的?
EN

Stack Overflow用户
提问于 2012-04-05 21:12:49
回答 3查看 1.7K关注 0票数 0

我有一个变量,在插入到我的数据库中之前,我需要剥离sybols,你知道我如何将mysql_real_escape_string()函数添加到我现有的代码中吗?

表单页面

此页面是显示数据库内容的基本html表单。

代码语言:javascript
复制
<?php 
 $query = sprintf( "SELECT * FROM sitecontent WHERE ID = $_GET[id]");
$result = mysql_query($query) or die (mysql_error());
$post = mysql_fetch_array($result);

   ?>

       <form action="editp.php" method="POST" name="editform">
    <label for="pName" style="padding:10px; ">Post Title</label>
    <input type="text" name="pName" style=" width:550px;border:#000099; margin:10px;"   value="<?php echo $post['Post_Title']; ?>"/>
    <label for="pCategory" style="padding:10px; ">Category</label>
    <input type="text" name="pCategory" style=" width:50px;border:#000099; margin:10px;" value="<?php echo $post['Post_Year']; ?>"/>
    <label for="pItem" style="padding:10px;">Item Type</label>
   <select name="pItem" style="border:#000099; margin:10px;">
    <option value="1">News</option>
   <option value="2">Review</option>
 </select>
 <label for="pName" style="padding:10px;">Article ID</label>
      <input type="text" name="pID" style="border:#000099; margin:10px;" value="<?php echo $post['ID']; ?>"/>
  <label for="pName" style="padding:10px;">Post Date</label>
   <input type="text"  name="pDate" style="border:#000099; margin:10px;" value="<?php echo $post['Date']; ?>">
   <label for="pName" style="padding:10px;">Post Author</label>
 <input type="text" name="pAuthor" style="border:#000099; margin:10px;" value="<?php echo $post['Post_Author']; ?>"/>
   <label for="pName" style="padding:10px;">Home Page</label>
  <select name="Page" style="border:#000099; margin:10px;">
  <option value="0">None</option>
  <option value="1">Home</option>
 </select>
 <label for="pPriority" style="padding:10px;">Home Priority</label>
   <select name="pPriority" style="border:#000099; margin:10px;">
 <option value="0">None</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  </select>
    <label for="pName" style="padding:10px;">Post Content</label>
  <textarea style="width:550px; height:200px;border:#000099; margin:10px;" type="text" name="pContent" id="pContent" value="<?php echo $post['Post_Content']; ?>"><?php echo $post['Post_Content']; ?></textarea>
    <span id="btnStrong" style="  padding: 2px 8px;background-color:#C00;font-family:'Trebuchet MS', Arial, Helvetica, sans-serif; color:#FFF; cursor:pointer;">Bold</span> &nbsp; <span id="btnItalic" style=" padding: 2px 8px; background-color:#C00;font-family:'Trebuchet MS', Arial, Helvetica, sans-serif; color:#FFF; cursor:pointer;">Italic</span>
   <label for="pImage_Name" style="padding:10px;">Image Name</label>
   <input type="text" name="pImage_Name" style="border:#000099; margin:10px; width:550px;" value="<?php echo $post['Image_Name']; ?>"/>
   <label for="pApproval" style="padding:10px;">Approval</label>
   <select name="pApproval" style="border:#000099; margin:10px;">
  <option value="0">Pending</option>
  <option value="1">Approved</option>
  </select>
   <input type="hidden" name="id" value="<?php echo $_GET['id']; ?>"/>
     <span style="margin-left:10px;">Please check the changes above before submitting</span>                <br/>
   <input type="submit" name="go" value="Submit Changes" style=" padding: 2px 8px;background-color:#C00; color:#FFF; margin:10px;"/>
   </form>

   <?php
$updateq = "UPDATE sitecontent WHERE ID = '$_POST[id]'";
   ?>

更新页面

这是将表单内容写入数据库的页面。

代码语言:javascript
复制
    <?php
 include'includes/connection.php';
 $pName = $_POST['pName'];
 $pItem = $_POST['pItem'];
 $pCategory = $_POST['pCategory'];
 $pDate = $_POST['pDate'];
 $pAuthor = $_POST['pAuthor'];
 $pContent = $_POST['pContent'];
 $Page = $_POST['Page'];
 $id = $_POST['id'];
 $pApproval = $_POST['pApproval'];
 $pPriority = $_POST['pPriority'];
 $pImage_Name = $_POST['pImage_Name'];

 $updateq = "UPDATE sitecontent SET ID = '$pID', Post_Title = '$pName', Post_Year =      '$pCategory', Date = '$pDate', Post_Author = '$pAuthor', Post_Content = '$pContent', Page =      '$Page', Post_Approval = '$pApproval', Priority = '$pPriority', Image_Name = '$pImage_Name'      WHERE ID = '$_POST[id]'";

 $result = mysql_query($updateq) or die (mysql_error());
 header("Location:admin.php");

 ?>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-05 21:13:58

对于字符串,只需说:

代码语言:javascript
复制
$pName = mysql_real_escape_string($_POST['pName']);

对于整数:

代码语言:javascript
复制
$id = intval($_POST['id']);

这就是它的全部;只需对所有变量执行此操作即可

编辑

无论如何,我建议你使用PDO来代替,这样可以更好的防止sql注入!

票数 5
EN

Stack Overflow用户

发布于 2012-04-05 21:23:23

唉哟!别干那事!

代码语言:javascript
复制
 $updateq = "UPDATE sitecontent SET ID = '$pID', ... WHERE ID = '$_POST[id]'";

 $result = mysql_query($updateq) or die (mysql_error());

如果我把这个贴出来呢?

代码语言:javascript
复制
 id=1%37%3B%20delete%20from%20sitecontent%20where%20%37%37%3D%37

这将使您的查询看起来像这样:

代码语言:javascript
复制
 $updateq = "UPDATE sitecontent SET ID = '$pID', ... WHERE ID = '1'; delete from sitecontent where ''=''";

这称为SQL注入。请使用数据库查询占位符!

即使数据库驱动程序不允许每个查询有多条语句,您仍然可以更改他人的记录!

票数 1
EN

Stack Overflow用户

发布于 2012-04-05 21:38:54

您还可以尝试使用一个简单的foreach来过滤所有内容

代码语言:javascript
复制
foreach($_POST as $key => $value)
{
    $value = filter_var($value, FILTER_SANITIZE_STRING);
    $value = mysql_real_escape_string($value);
    $_POST[$key] = $value ;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10029281

复制
相关文章

相似问题

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