在这个PHP代码中防止sql注入

时间:2013-10-30 10:12:37

标签: php mysql sql sql-injection

我想问一下如何在下面的代码中修复sql注入。我认为如果我是正确的,易受sql注入的代码。

$result = mysql_query("SELECT * FROM newsevent order by date DESC"); 

这是完整的代码。这个文件来自newsview.php?id = 200.Anybody可以从下面的代码中给出建议并解释为什么下面的代码容易受到tu sql注入。

<?php 
$page="video";  
require('include/header.php');  
require('include/config.php'); 
session_start(); 

$result = mysql_query("SELECT * FROM newsevent order by date DESC"); 
?> 

<section id="wrappermain"> 
    <div class="wrapper"> 
        <div class="gray-top">&nbsp;</div> 
          <div class="content"> 

        <h2>News and Events</h2> 

            <div id="video"> 
                <?php 
                    while($row = mysql_fetch_assoc($result)) 
                    { 
                        $no+= 1; 
                        $clk = $row['date']; 

                ?> 

                        <a class="h-cat" href = "newsview.php?id=<?php echo $row['id']; ?>"><?php echo $row['title']; ?></a> ( <a> <?php $date1 = $clk;    $date2 = time(); require('include/timestamp.php'); ?> </a>) 


                    <div class="vline">             
                    <div class="v-img"> 
                        <a href = "newsview.php?id=<?php echo $row['id']; ?>"> <img src = "images/newsandevent/<?php echo $row['image']; ?>" style = "height: 150px; width: 250px;" /> </a>    
                    </div> 
                    <div class="v-des">     
                        <?php echo substr($row['de'],0,225); ?><br/><span style="float:right;padding: 10px 0px;"> <a href = "newsview.php?id=<?php echo $row['id']; ?>"> Read more ... </a> </span>       
                     </div> 
                    </div> 
            <?php } ?> 

            </div> 

            <div class="right"> 
                <div class="white-lt"> 
                <div class="white-rt"></div> 
                    <div class="white-m"> 

                         <strong></strong> 

                        <div style="width: 150px;"> 
                        <?php $result = mysql_query("SELECT * FROM newslink order by id DESC"); 
                        while($row = mysql_fetch_assoc($result)) 
                        { 
                        ?> 

                        <?php echo $row['de']; ?> 


                        <?php } ?>  
                      </div>                                   
                   </div> 
                <div class="white-lb"> 
                <div class="white-rb"></div>  
             </div>    
            </div> 
            </div> 


            </div> 
         <div class="gray-bot">&nbsp;</div> 
    </div> 
</section> 
<?php  
require('include/footer.php');  
?> 

2 个答案:

答案 0 :(得分:1)

由于你没有在查询中输入任何输入,所以没有sql注入的问题。但是如果你在查询中使用任何数据(变量),那么你必须知道sql注入。

您可以使用prepared statements阻止sql注入。

这里使用的是SELECT * FROM newsevent order by date DESC之类的查询。在这种情况下,没有变量传递给查询。所以查询中不会有任何修改。但是如果你使用这样的查询

SELECT * FROM newsevent order by date DESC where some_column = '$variable'

这里说$variable是一个可以替换值的数据。所以你必须知道这里的sql注入。你也可以检查以下答案,这是sql注入情况下评价最高的答案

  1. How can I prevent SQL injection in PHP?

答案 1 :(得分:0)

在这种情况下,SQL注入不适用,因为您没有在SQL语句中插入用户数据。

但是,如果您的表数据是用户输入的,那么您的代码很容易受到PHP code injection的攻击。<​​/ p>