即使使用mysql_real_escape_string()函数,是否存在SQL注入的可能性?
考虑这个示例情况.SQL是用PHP构造的,如下所示:
$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));
$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
Run Code Online (Sandbox Code Playgroud)
我听过很多人对我说,这样的代码仍然很危险,即使使用了mysql_real_escape_string()函数也可以破解.但我想不出任何可能的漏洞?
像这样的经典注射:
aaa' OR 1=1 --
Run Code Online (Sandbox Code Playgroud)
不工作.
你知道任何可能通过上面的PHP代码注入的注入吗?
这足以避免SQL注入吗?
mysql_real_escape_string(htmlentities (urlencode($_POST['postmessage'])));
Run Code Online (Sandbox Code Playgroud) 我应该使用mysqli_real_escape_string还是应该使用准备好的语句?
我现在已经看到一个教程解释准备好的语句,但我看到它们做了同样的事情,mysqli_real_escape_string但它使用了更多行
准备好的报表有什么好处吗?您认为最好的使用方法是什么?
我使用CodeIgniter,并且遇到黑客问题.是否可以对下面的登录代码进行SQL注入:
function process_login()
{
$username = mysql_real_escape_string($this->input->post('username'));
$password = mysql_real_escape_string(MD5($this->input->post('password')));
//Check user table
$query = $this->db->getwhere('users', array('username'=>$username, 'password'=>$password));
if ($query->num_rows() > 0)
{
// success login data
Run Code Online (Sandbox Code Playgroud)
我用 mysql_real_escape_string错了,还是什么?
我认为我有一个完整的工作网站,有许多调用MySQL服务器,并在这个网站上做了一些研究,我看到以这种形式制作我的查询:
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
Run Code Online (Sandbox Code Playgroud)
我可以解决安全问题,但是,正如我所说的,我有很多调用MySQL服务器,并且解决问题的最好方法(在我的情况下)直接转到vars im传递给查询但是whitout使用a MySQL函数因为im出了查询.让我解释一下,我有这个:
mysql_query("SELECT * FROM `post` WHERE id=" . $_GET['edit']);
Run Code Online (Sandbox Code Playgroud)
我不能对这个查询进行修改,因为我在我的所有代码中都有很多这样的东西,我想要检查var上的注入,$ _GET ['edit'].
如何使用纯PHP检查查询变量的SQL注入?喜欢:
$_GET['edit']=freehack($_GET['edit']);
Run Code Online (Sandbox Code Playgroud) 我目前正在使用以下函数来清理我的$ _POST和$ _GET反对SQL注入.不幸的是,我不能通过它发布代码,例如:" <a href test".Twitter如何做到这一点?
function _secinput($variable)
{return filter_var(mysql_real_escape_string($variable), FILTER_SANITIZE_STRING); }
Run Code Online (Sandbox Code Playgroud)
另外,任何人都可以告诉我是否可以通过任何方式改进它?
我正在使用mysqli准备好的语句.我是否仍应使用以下功能清理用户输入:
function sanitise($string){
$string = strip_tags($string); // Remove HTML
$string = htmlspecialchars($string); // Convert characters
$string = trim(rtrim(ltrim($string))); // Remove spaces
$string = mysql_real_escape_string($string); // Prevent SQL Injection
return $string;
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在将大量信息从XML文件写入数据库.
一切正常,直到我遇到一个带有'在描述中的字段,插入失败并出现错误
Run Code Online (Sandbox Code Playgroud)Error 1064:You have an error in your SQL syntax; check the manual that对应你的MySQL服务器版本,使用正确的语法,让你感觉就像这样.我们很乐意让您访问我们,在第3行查看超过100'
有没有办法插入它而不失败?导入文件可能很大并且会定期更改,因此我无法搜索和替换其中的字符.
我的实际PHP声明是:
$query = mysql_query("REPLACE into list
(id, name, link, description, cost, date_added,type,myipaq,private,imgurl)
VALUES ('$id','$name','$link',"'$description'",'$cost','$date','$type','$myipaq','$private','$imgurl')");
Run Code Online (Sandbox Code Playgroud)
提前致谢,
格雷格
我一直在使用mysql_real_escape_string在其他函数中清理我的输入,并且最近读过Prepared Statements是真正安全的唯一方法.但是我不愿意使用它们有两个原因:我不想重写代码,我读到使用它们会对性能产生影响(查询在这个应用程序中被广泛使用).
所以我正在寻找一个最近的具体例子,其中mysql_real_escape_string在查询中失败,并且解决方案是使用Prepared Statements(即没有办法进一步消毒输入并保证它是安全的).
我问这个是因为我能找到符合上述标准的唯一例子是从前一段时间开始,并且已经在更新版本的php中修补了.