一尘不染

在哪里使用mysql_real_escape_string防止SQL注入?

mysql

我遇到了一群黑客。他们几次入侵了我客户的网站,我的客户更加生气:(我的客户丢失了他的数据库(有数百条记录),不得不输入所有:(

现在,我将进行更多介绍。

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

现在正在处理SQL注入问题。我在管理面板登录参数中添加了mysql_real_escape_string。所以我还应该在哪里使用mysql_real_escape_string?我的网站上只有几封电子邮件表格,我认为我不需要在此添加…

我有一个index.php作为主页。我应该为此页面做些什么,以防止通过url like进行任何sql注入攻击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’]]


阅读 234

收藏
2020-05-17

共1个答案

一尘不染

基本上,每次您在SQL查询中使用一些不安全的数据(用户输入,来自数据库,文件或外部网站的值,即,您不能 100%
确定安全的任何数据)时,都应使用mysql_real_escape_string。请注意,根据OWASP,此功能对于转义动态表名称并不安全(但这远比“基本”用户输入插入少见)。

我建议您阅读有关SQL注入的整个OWASP文章,并浏览网站的其余部分。它是有关Web应用程序安全性的重要信息来源。

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

请记住,如果您选择使用mysql_real_escape_string()它,则仅在用引号分隔的字符串中使用时才起作用。切勿在任何未引用的值上使用它。这包括数值;而是验证用户输入实际上是数字。

2020-05-17