PHP的固定得到侵害他人

我有一个PHP文件,该文件在开始时,使用$ _GET什么被送到指定一些变量。

然后,它会做一些MySQL的查询,处理,输出,然后回声一些文本和变量。

我在代码中设置的唯一的保护mysql_real_escape_string上的GET。

那是足以防止攻击?

还有什么可以做什么?

--------------解决方案-------------

好吧,你把mysql_real_escape_string非常错误。
这不是你的错,但 - PHP社会之间邪恶的妄想其一。 即使是官方手册页把它全部错了。

此功能无关,与确保总体任何东西,获得特殊变量

这个功能仅仅是逃避字符串分隔符,使字符串分隔符不能断线。 因此,2最重要的后果:

  • 不仅GET变量,但所有的变量被装进行情查询应与处理mysql_real_escape_string()他们没有出处或者产地的或可能的危险性的物质
  • 它会只在引用的字符串效果。 这是完全没用的,使用此功能查询的其他部分,LIMIT子句变量的例子。

因此,以确保您的SQL查询,你必须遵循一整套规则 ,不只是掩耳盗铃“与mysql_real_escape_string净化你的数据。”

你可以学习如何保护你的SQL从我先前对类似题目的答案:在PHP字符串提交到数据库,我应该照顾使用的htmlspecialchars非法字符()时,或使用正则表达式?

更新
情景说明了为什么mysql_real_escape_string不是银弹

正与给定的URL
http://www.example.com/news.php?offset=99999+UNION+SELECT+password+FROM+users+--

代码

$offset = mysql_real_escape_string($_GET['offset']);
$sql = "SELECT title FROM news LIMIT $offset,20";

会导致如果不是在不那么华而不实少鲍比表“之一,但在一定程度毫不逊色灾难性的。

看看这个问题,

最好的办法停止在PHP中的SQL注入

它提供了一些很好的建议。

不,有很多的,你可能没有保护的攻击。 一个例子是CSRF。 这是一个很大的领域,所以我建议这个东西在OWASP网站阅读了:

http://www.owasp.org/

使用这个肯定是不够的。 它甚至没有足够的,当你只考虑SQL注入攻击。 当你只,但只要考虑对字符串SQL注入你有它出错一个整数(比如一个id),它足够了:

http://example.com/foo.php?id=10

穿过去:

$q = "SELECT * FROM foo where id = " + mysql_real_escape_string($_GET['id'])

这将导致德SQL查询:

SELECT * FROM foo where id = 10

这是很容易被利用,比如:

http://example.com/foo.php?id=10%3B%20DROP%20TABLE%20foo

穿过去:

$q = "SELECT * FROM foo where id = " + mysql_real_escape_string($_GET['id'])

这将导致德SQL查询:

SELECT * FROM foo where id = 10;DROP TABLE foo

我希望这个澄清为什么它是不够的。

你应该如何解决这个问题? 什么定义允许输入,并检查输入确实是形式的,比如:

if(preg.match("^[0-9]+$",$_GET['id']){
// your code here
}else{
// invalid id, throw error
}

但是,最好的办法是在安全方面(关于SQL注入)是使用预处理语句:http://php.net/manual/en/pdo.prepared-statements.php

mysql_real_escape_string只会保护你agains当你在一个MySQL的字符串声明一样使用返回值SQL注入:

'SELECT foo FROM bar WHERE quux="'.mysql_real_escape_string($val).'"'

它wonâ€如果你在其他任何情况下(指定与排序顺序使用™吨保护你ASC / DESC ,行限制,表/行名称等)。 在这种情况下,有啊€™LL需要验证/过滤/消毒单独的值。

如果用户数据 ​​,也可以查询结果,你是要输出的一部分,则使用htmlspecialchars更换任何HTML特殊字符。

你如果GET变量必须使用isset()函数和空()函数的值

分类:php 时间:2012-01-01 人气:0
分享到:

相关文章

  • 如何防止SQL注入MySQL中的命令行shell界面? 2014-01-13

    我用shell脚本进行沟通,以MySQL数据库. MySQL支持指定查询作为shell参数,如下所示: mysql my_db -B -N -e "select id from Table" 但是,如果我有一个参数,我想在查询中使用,如何才能得到保护,防止注入攻击? 一个天真的办法是只贴上变量值的要求,但它不是很安全: mysql my_db -B -N -e "select id from Table where name='$PARAM'" 是否有任何技巧或记录

  • 如何从PHP的MySQL SQL注入容易查询到一个库MySQLi不容易查询 2013-01-09

    为了使我的网站不容易受到SQL注入(至极现在是),但我得到混淆当我试图以"翻译"我的老querys到MySQLi的语句,所以我希望你能帮助我做一些例子IM学习MySQLi的,所以我可以得到它. 非常感谢!. 更新我的网站计数器 $sql = "UPDATE post SET counter = counter+1 WHERE id=".$tget; 排序我的评论 $info=mysql_query("SELECT * FROM `comments` WHE

  • 可以SQL注入只和addslashes(字符串)可以预防吗? 2013-08-10

    可能重复: 什么mysql_real_escape_string()这样做和addslashes()不? 如果没有,我已经使用函数mysql_escape_string,并将其添加字符像\ r \ n的话,我不希望出现这种情况.. --------------解决方案------------- 不,这不是安全的. 使用mysql_real_escape_string()来代替. 它不应该添加任何超越什么需要逃避的字符串. http://php.net/mysql-real-escape-stri

  • 是否存在SQL Server和MySQL之间的差异,当谈到防止SQL注入? 2013-07-11

    我习惯在PHP / MySQL的开发,没有经验,与SQL Server进行开发. 我已经掠过PHP MSSQL文档,它看起来在一些我了解的方法类似于库MySQLi. 例如,与MySQL我利用功能mysql_real_excape_string(). 是否有使用PHP / SQL Server的一个类似的功能? 我需要采取以防止SQL注入与SQL Server哪些步骤? 什么是关于SQL注入预防SQL Server和MySQL之间的区别? 还 - 是这个职位是否准确? 是SQL Server中的转

  • 拿什么来防止SQL注入在mysql中的最佳方式 2013-08-13

    我不知道很多有关SQL注入. 我想知道,什么是防止SQL注入在mysql中的最佳方式是什么? 我应该如何插入数据库中的数据,我应该如何从数据库获取它们,如何执行搜索查询,在MySQL更新查询. 高达在这里,我知道和addslashes是用来防止SQL注入MySQL中使用PHP. 当其从数据库中检索数据时产生的问题. 我在这里描述的问题. http://stackoverflow.com/questions/2100622/search-problem-in-mysql-query 请你让我知道如

  • 是否有任何其他选项,以避免除了在PHP / MySQL的Web应用程序准备语句SQL注入? 2013-09-22

    我知道,当我们谈论在PHP的SQL注入/ MySQL的准备stamtements是去即便如此,我们永远不会知道这是不够的方式,但我想知道是否有任何其他有效的解决办法,以防止SQL注入. 我也有这个小功能,在试图避免基本的SQL注入式攻击来解析字符串. function cleanString($str) { $strEncoding = mb_detect_encoding($str) != 'UTF-8' ? 'ISO-8859-15' : 'UTF-8'; $str = trim($str)

  • MySQL的注入问题 2013-08-22

    我一直在编码我的网站在PHP最近,我对我的好我的消毒输入之前我在查询中使用它的做法很为自己感到骄傲. 这一切都是那么美妙,直到我的朋友说,我需要我的消毒输入. 当我试图向他解释,这是消毒,他给我看了他发现在"用户"表在我的数据库的一切. 我不知道怎么回事,所以我想我会后我在做什么错,使我消毒不起作用. 这里是PHP代码,他利用: start_mysql(); // Starts the databases stuff, etc. $id = mysql_real_escape_stri

  • 允许代码片段的形式输入,同时防止XSS和SQL注入攻击 2013-05-17

    一个人怎么可以让代码片段被输入到编辑器(如计算器一样)像FCKeditor的或任何其他编辑器,同时防止XSS,SQL注入,以及相关的攻击. --------------解决方案------------- 这里的问题的部分原因是要允许某些类型的HTML,对不对? 链接为例. 但是,你需要清理出这一点可能包含XSS攻击的像脚本标签或就此而言,即使事件处理程序属性或一个href或其他属性,开始与那些HTML标签"的javascript:". 所以,一个完整的回答你的问题需要的东西比"

  • 如何防止在C语言中的SQL注入? 2013-12-07

    我现在用C语言来处理HTTP事件,我需要与MySQL做SQL操作,那么如何防止SQL注入,有没有C库对于这一点,谢谢? --------------解决方案------------- 您防止SQL注入(或shell转义注射液等)的方式是不及格未加引号的文字字符串到把一些字符作为特殊的接口. 需要包括它作为一个较大的"命令串"将由SQL数据库,外壳,外部命令进行解释,API,它需要URI字符串等的部分之前,以串数据转换到一个安全引号形式 SQL注入攻击,并就如何防止他们一些提示

  • PHP与SQL注入 - UTF8 POC 2014-09-10

    有一个关于addslashes的和mysql_real_escape功能都不怎么安全,以防止注射很多讨论. 事实是,即使是大框架或类似的CMS WordPress的使用这个功能,他们做神的工作至今. 我知道有使用GBK字符集时,某些特定的情况下,或utf8_decode可用于注入一些SQL代码,或者像一些简单的例子1' OR 1 --可以使用时,有一个简单的地方参与. 然而,一些研究之后,似乎很难注入一些与使用和addslashes或mysql_real_escape一个简单的查询,如果该字符集

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.331 (s). 10 q(s)