在哪里使用mysql_real_escape_string来阻止SQL注入?

des*_*ing 12 php mysql security sql-injection

我和一群黑客有麻烦.他们几次攻击我的客户的网站,我的客户端变得更生气:(我的客户丢失了他的数据库(有数百条记录),并且不得不输入所有:(

现在我正在进行更多的介绍;

  • 修复了文件权限
  • 更改了ftp和主机登录信息
  • 清除所有远程mysql访问

现在正致力于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);
........
Run Code Online (Sandbox Code Playgroud)

是否足以使用mysql_real_escape_string作为$ id.不是$ this-> row_all [$ this-> tbl_jobs ['f4']]

Woo*_*kai 13

基本上,每次在SQL查询中使用一些不安全的数据(用户输入,数据库,文件或外部网站的值,即您不能100%确定它是安全的任何数据)时,您应该使用它来转义它mysql_real_escape_string.请注意,根据OWASP,此函数对于转义动态表名称并不安全(但这远不如"基本"用户输入插入那么常见).

我建议你看一下关于SQL注入的整篇OWASP文章,还要浏览网站的其他部分.它是有关Web应用程序安全性的重要信息来源.

IMO,防止SQL注入的首选方法是使用预准备语句.

请记住,如果您选择使用mysql_real_escape_string()它,只有在用引号分隔的字符串中使用时才有效.切勿在任何未引用的值上使用它.这包括数值; 相反,验证用户输入实际上是数字.