Php SQL注入保护-何时何地

Php SQL注入保护-何时何地,php,sql-server,.htaccess,mysqli,sql-injection,Php,Sql Server,.htaccess,Mysqli,Sql Injection,我正在构建一个网站,它使用通过URL传递的信息从数据库表中挑选信息,但我注意到这样做可能会导致SQL注入。由于我认为这只是一个问题,您需要将信息插入数据库,因此我对何时、如何以及在何处保护代码感到有点困惑 目前我有一个url,看起来像: www.website.com/article.php?title=title&id=1 在http://www.website.com/article/title/1 在我的article.php页面中,我有: <?php if(isset($

我正在构建一个网站,它使用通过URL传递的信息从数据库表中挑选信息,但我注意到这样做可能会导致SQL注入。由于我认为这只是一个问题,您需要信息插入数据库,因此我对何时、如何以及在何处保护代码感到有点困惑

目前我有一个url,看起来像:

www.website.com/article.php?title=title&id=1
在http://www.website.com/article/title/1

在我的article.php页面中,我有:

<?php
if(isset($_GET["id"])){$url_id = $_GET["id"];}else{
header("Location: $site_url");
exit();
};
?>
<?php
if(isset($_GET["title"])){$url_title = $_GET["title"];}else{
header("Location: $site_url");
exit();
};
?>
<?php
$article_sql = "SELECT ...

应该这样做,但这是正确的吗?

您已经使用了
mysqli\uuuu
,所以请充分利用它。以下是基于您提供的代码的简单示例:

<?php
 // $mysqli is the connection
$article_sql = $mysqli->prepare("SELECT * FROM table WHERE url_id = ? AND url_title = ?");

$article_sql->bind_param("is", $url_id, $url_title);
$article_sql->execute();

$result = $article_sql->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM)) {
  foreach ($row as $r) {
    print "$r ";
  }
  print "\n";
}

你需要的一切都在这个线程中。只是为了你的信息,mysqli\u real\u escape\u string与SQL注入完全无关。@你的常识那么为什么我在这么多场合被告知这是一个解决注入威胁的方法???在我看来,除非你开始使用事先准备好的声明,否则你不会安全。只是不要直接在查询中注入变量。谢谢。我肯定会考虑使用这段代码。作为一个附带问题,对于
删除
一个表的注入攻击,它必须知道该表的名称,这是真的吗?如果是这样的话,给表起一个模糊的名字不是一个好办法吗?嗯,是的。。。攻击者必须知道他攻击的是什么:),但他必须通过注射找到它,这样才能防止使用这种技术。检查这似乎攻击者可以找到解决一切问题的方法,哈哈。我确信他们很不幸会再次这样做,甚至在将来使准备好的语句变得不安全:-(-有没有办法防止他们使用可以放在单个
include
文件中的通用PHP代码列出表和数据库?您可以限制用户对mysql数据库的权限:。并限制用户仅使用某些表。我在CPanel中将自己作为用户添加到数据库中,并设置perm我想知道,如果我知道我的URL永远不会使用特殊字符,我是否可以设置它,以便在任何URL中存在特殊字符时,我可以使用PHP脚本自动重定向到另一个页面,以防止攻击URL加载目标页面?
<?php
 // $mysqli is the connection
$article_sql = $mysqli->prepare("SELECT * FROM table WHERE url_id = ? AND url_title = ?");

$article_sql->bind_param("is", $url_id, $url_title);
$article_sql->execute();

$result = $article_sql->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM)) {
  foreach ($row as $r) {
    print "$r ";
  }
  print "\n";
}