最近,一位黑客试图使用sleep注入(inject)来降低我的网站速度。尽管我们正在使用诸如mysql_real_escape_string()之类的预防措施来覆盖大多数易受攻击的输入。我们通过查询字符串传递产品的ID,它使命令为:$id=mysql_real_escape_string($_REQUEST['id']);$qry="Select*fromproductswhereid=".$id;但是黑客试图提供输入为?id=3andsleep(4)查询变为Select*fromproductswhereid=3andsleep(4);虽然有一些可能的解决方案,比如检查产品ID是否为
$id=trim((int)$_GET['id']);$sql='SELECT*FROMusersWHEREid='.$db->quote($id).'LIMIT1';$run=$db->query($sql)->fetch();PDO的quote方法作为准备好的语句是否安全?或者我必须在我的脚本中一直使用准备好的语句? 最佳答案 基本上quote()作为准备语句是安全的,但它取决于quote()的正确实现,当然也取决于它的后续用法。此外,必须考虑所用数据库系统/PDO驱动程序的实现才能回答这个问题。虽然准备好的语句可以是底层数据库
我的想法是,我有一个完整的工作网站,可以多次调用MySQL服务器,并且在这个网站上做了一些研究,我看到以这种形式进行查询:$query=sprintf("SELECT*FROMusersWHEREuser='%s'ANDpassword='%s'",mysql_real_escape_string($user),mysql_real_escape_string($password));我可以解决安全问题,但是,正如我所说,我对MySQL服务器有很多调用,解决问题的最佳方法(在我的例子中)是直接转到传递给查询的变量,但是没有使用MySQL函数,因为我不在查询范围内。让我解释一下,我有这个
我编写了这个简短的函数来防止my_sql注入(inject),由于它的重要性,我只想与其他人仔细检查它是否会按我的预期运行。foreach($_REQUESTas$key=>$value){$_REQUEST[$key]=stripslashes($value);$_REQUEST[$key]=mysql_real_escape_string($_REQUEST[$key]);} 最佳答案 那么,您使用stripslashes()是因为magic_quotes_gpc已设置?所以这段代码只有在设置了magic_quotes_gpc时
我构建了一个函数来使用PDO检查数据库中是否存在表,但我不确定我是否已正确保护它。publicfunctiontableExists($table){try{$this->query('SELECT1FROM`'.str_replace('`','',$table).'`LIMIT1');}catch(\PDOException$e){if($e->errorInfo[1]==1146){returnfalse;}throw$e;}returntrue;}如果$table是直接从用户输入提供的,攻击者是否有可能破坏查询?(极端情况) 最佳答案
以下是开始对话的几种可能性:在初始化时转义所有输入。转义每个值,最好是在生成SQL时。第一个解决方案是次优的,因为如果您想在SQL以外的任何地方使用它,例如在网页上输出它,那么您需要取消转义每个值。第二种解决方案更有意义,但手动转义每个值很痛苦。我知道preparedstatements,但是我发现MySQLi麻烦。此外,将查询与输入分开让我很担心,因为尽管正确的顺序很重要,但很容易出错,从而将错误的数据写入错误的字段。 最佳答案 准备好的陈述是最好的答案。您进行测试是因为您可能会犯错误!参见this问题。
这个问题在这里已经有了答案:SQLinjectionthatgetsaroundmysql_real_escape_string()(4个答案)关闭9年前。首先,我知道人们想要使用存储过程以便他们重用查询并处理转义。然而,我看到很多开发者说mysqli_real_escape_string不能100%防止SQL注入(inject)。有人可以提供这方面的例子吗?根据我对这个主题的有限了解,我会说mysqli_real_escape_string对于字符串总是没问题,但对于数值你可能会被抓到,除非你检查数字是一个int、float、double等。编辑:我忘了添加一些关键的东西:假设字符集
这个问题在这里已经有了答案:HowcanIpreventSQLinjectioninPHP?(27个答案)关闭去年。防止MySQL注入(inject)的最佳方法是什么?我应该注意哪些弱点?我知道它是什么,但我真的不知道我可能有多脆弱。尽管我已经采取了(我认为是)措施来保护我自己和我的数据库。有什么可靠的方法可以阻止某人吗?顺便说一句...我用PHP编写:)
此查询与Dapper结合使用是否安全?如果不是,在MySql下写的正确方法是什么?或者有没有不使用concat的更好版本?stringsql="SELECT*fromuser_profileWHEREFirstNameLIKECONCAT("%",@name,"%");"varresult=connection.query(sql,new{name}); 最佳答案 该代码没有问题,但另一种方法是在调用者处执行连接,即conststringsql="SELECT*fromuser_profileWHEREFirstNameLIKE@n
来自http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php我得到了:SQLinjectionreferstotheactofsomeoneinsertingaMySQLstatementtoberunonyourdatabasewithoutyourknowledge.Injectionusuallyoccurswhenyouaskauserforinput,liketheirname,andinsteadofanametheygiveyouaMySQLstatementthatyouwillunknowinglyr