PHP包括数字

PHP包括数字,php,sql-injection,Php,Sql Injection,如果我像这样构建我的页面,我需要检查news\u id在news.php中是否也是数字吗?或者这安全吗 index.php: news.php: 简短回答:是的,你应该 有人可能(也将)绕过index.php请求news.php。简短回答:是的,你应该这样做 有人可能(也将)请求news.php,绕过index.php。在将数据发送到MySQL之前,您确实应该对数据进行转义和清理。不保证有人不会试图通过post数据发送恶意内容 $news_id = (int)$_GET[news_id]; $

如果我像这样构建我的页面,我需要检查news\u id在news.php中是否也是数字吗?或者这安全吗

index.php:

news.php:


简短回答:是的,你应该


有人可能(也将)绕过index.php请求news.php。

简短回答:是的,你应该这样做


有人可能(也将)请求news.php,绕过index.php。

在将数据发送到MySQL之前,您确实应该对数据进行转义和清理。不保证有人不会试图通过post数据发送恶意内容

$news_id = (int)$_GET[news_id];

$query = mysql_query("SELECT * FROM news WHERE news_id = " . 
                      mysql_real_escape_string($news_id));
$row = mysql_fetch_assoc($query);

if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');

在将数据发送到MySQL之前,您确实应该对其进行转义和清理。不保证有人不会试图通过post数据发送恶意内容

$news_id = (int)$_GET[news_id];

$query = mysql_query("SELECT * FROM news WHERE news_id = " . 
                      mysql_real_escape_string($news_id));
$row = mysql_fetch_assoc($query);

if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');
  • 它不安全
  • 不检查,使用intval()将其转换为整数
  • 永远不要在没有转义或强制转换的情况下将GPC变量放入SQL
  • 它不安全
  • 不检查,使用intval()将其转换为整数
  • 永远不要在没有转义或强制转换的情况下将GPC变量放入SQL
    其他答案绝对正确,您不应允许任何用户直接输入数据库或任何其他敏感区域

    您应该验证/清理来自$\u GET、$\u POST等的所有输入。。。您可以使用PHP的内置函数,也可以使用框架中内置的函数,如Cake PHP或Symphony,这两种函数都使处理用户数据变得更加容易

    jonstjohn有一个很好的观点,就是您可以通过这种方式打开sql注入,而其他形式的攻击都是基于向您的应用程序中输入恶意代码


    值得一读Jeff Atwood的文章,了解一下这些问题以及其他问题的背景。

    其他答案绝对正确,您不应该允许任何用户直接输入数据库或任何其他敏感区域

    您应该验证/清理来自$\u GET、$\u POST等的所有输入。。。您可以使用PHP的内置函数,也可以使用框架中内置的函数,如Cake PHP或Symphony,这两种函数都使处理用户数据变得更加容易

    jonstjohn有一个很好的观点,就是您可以通过这种方式打开sql注入,而其他形式的攻击都是基于向您的应用程序中输入恶意代码


    值得一读杰夫·阿特伍德(Jeff Atwood)的文章,了解一些关于这些问题以及其他问题的背景知识。

    将其转换为整数是什么意思?我该怎么做?$news\u id=intval($u GET['news\u id');把它转换成整数是什么意思?我该怎么做?$news\u id=intval($u GET['news\u id')-1.你的代码是多余的,看起来你根本不知道它到底在做什么。你的代码是多余的,看起来你根本不知道它到底在做什么。
    $news_id = (int)$_GET[news_id];
    
    $query = mysql_query("SELECT * FROM news WHERE news_id = " . 
                          mysql_real_escape_string($news_id));
    $row = mysql_fetch_assoc($query);
    
    if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');