在哪里使用mysql

我遇到了一群黑客的麻烦。 他们侵入了我客户的网站几次,而我的客户变得更加生气:(我的客户失去了他的数据库(有数百条记录),并且必须输入全部:(

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

  • 固定的文件权限
  • 更改了ftp和主机登录信息
  • 清除所有远程mysql访问
  • 现在正在处理SQL注入问题。 我将mysql_real_escape_string添加到管理面板登录参数。 那么我应该在哪里使用这个mysql_real_escape_string? 我在网站上有几个电子邮件表单,我不认为我需要在那里添加...

    我有一个index.php作为主页。 我应该为这个页面做些什么来防止通过像index.php?somesql=这样的URL进行任何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);
    ........
    

    对$ id使用mysql_real_escape_string就足够了。 不是$ this-> row_all [$ this-> tbl_jobs ['f4']]


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

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

    国际海事组织,防止SQL注入的首选方法是使用准备好的语句。

    请记住,如果您选择使用mysql_real_escape_string()则它仅适用于以引号分隔的字符串内部。 切勿在任何未引用的值上使用它。 这包括数值; 相反,验证用户输入实际上是数字。


    与用户输入有关的两件最重要的事情是

  • 输入过滤
  • 输出转义
  • 输入过滤是将数据/ [之前] /它存储在数据库中的过程。 执行mysql_real_escape_string()属于此步骤(虽然有更好的方法来清理用户数据以便插入数据库),但此步骤还可以包括修剪空白区域,亵渎过滤,标记转换等。

    将用户内容发送到不允许恶意行为的浏览器时,输出转义会很谨慎。 这意味着执行htmlentities()或其他选择性筛选过程。

    还有其他的事情可以做,比如资源限制(DOS预防),表单令牌(CSRF保护)等等。去OWASP并开始阅读。


    Web开发的黄金法则之一是永远不会(永远)信任用户输入。 因此,只要你有数据进入数据库,你应该调用mysql_real_escape_string()。

    此外,为防止将来生气的客户,您应定期备份您的数据库。 如果我是你的客户,我现在会愤怒。

    祝你网站安全。

    链接地址: http://www.djcxy.com/p/16685.html

    上一篇: Where to use mysql

    下一篇: Android: Hide soft input keyboard