[英]Where to use mysql_real_escape_string to prevent SQL Injection?
我和一群黑客有麻烦。 他们几次攻击我的客户的网站,我的客户端更生气:(我的客户丢失了他的数据库(有数百条记录),并且不得不输入所有:(
现在我正在进行更多的介绍;
现在正致力于SQL注入问题。 我将mysql_real_escape_string添加到管理面板登录参数。 那么我应该在哪里使用这个mysql_real_escape_string呢? 我在网站上的电子邮件表格很少,我不认为我需要添加...
我有一个index.php作为主页。 我是否应该为此页面做任何事情以防止任何sql注入攻击通过url如index.php?somesql=
?
请建议我! 我很感激!!! :(
例如:
我有这样的代码;
public function showDetails($id) {
// SQL Jobs Details
$this->sql_job = "SELECT * FROM jobs WHERE id=".mysql_real_escape_string($id);
$this->rst_job = mysql_query($this->sql_job);
$this->row_all = mysql_fetch_assoc($this->rst_job);
// SQL State
$this->sql_state = "SELECT title FROM state WHERE id=" . $this->row_all[$this->tbl_jobs['f4']];
$this->rst_state = mysql_query($this->sql_state);
$this->row_state = mysql_fetch_assoc($this->rst_state);
........
是否足以使用mysql_real_escape_string作为$ id。 不是$ this-> row_all [$ this-> tbl_jobs ['f4']]
基本上,每次在SQL查询中使用一些不安全的数据(用户输入,数据库,文件或外部网站的值,即您不能100%确定它是安全的任何数据)时,您应该使用它来转义它mysql_real_escape_string 。 请注意, 根据OWASP ,此函数对于转义动态表名称并不安全(但这远不如“基本”用户输入插入那么常见)。
我建议你看一下关于SQL注入的整篇OWASP文章 ,还要浏览网站的其他部分。 它是有关Web应用程序安全性的重要信息来源。
IMO,防止SQL注入的首选方法是使用预准备语句 。
请记住,如果您确实选择使用mysql_real_escape_string()
它只能在由引号分隔的字符串中使用时才有效。 切勿在任何未引用的值上使用它。 这包括数值; 相反,验证用户输入实际上是数字。
用户输入的两个最重要的事情是
输入过滤是转换数据/ [之前] /它存储在数据库中的过程。 执行mysql_real_escape_string()
属于此步骤(尽管有更好的方法可以清理数据库插入的用户数据),但此步骤还可以包括修剪空白区域,亵渎过滤,标记转换等。
将用户内容发送到不允许恶意行为的浏览器时,输出转义非常重要。 这意味着执行htmlentities()
或其他一些选择性筛选过程。
您还可以执行其他操作,例如资源限制(DOS预防),表单令牌(CSRF保护)等。转到OWASP并开始阅读。
Web开发的黄金法则之一是永远(永远!)信任用户输入。 因此,在数据进入数据库的任何地方,都应该调用mysql_real_escape_string()。
此外,为了防止将来生气的客户,您应该定期备份您的数据库。 如果我是你的客户,我现在会生气。
祝你的网站安全。
防止SQL注入的最佳方法是使用预准备语句和绑定变量。 您使用的是哪个版本的MySQL? 准备好的声明有4.1及更高版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.