Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在哪里使用mysql\u real\u escape\u字符串来防止SQL注入?_Php_Mysql_Security_Sql Injection - Fatal编程技术网

Php 在哪里使用mysql\u real\u escape\u字符串来防止SQL注入?

Php 在哪里使用mysql\u real\u escape\u字符串来防止SQL注入?,php,mysql,security,sql-injection,Php,Mysql,Security,Sql Injection,我遇到了一群黑客的麻烦。他们对我客户的网站进行了几次黑客攻击,我的客户变得更加愤怒:我的客户丢失了有数百条记录的数据库,不得不输入所有: 现在我再做一些介绍 固定文件权限 更改了ftp和主机登录信息 已清除所有远程mysql访问 现在正在处理SQL注入问题。我将mysql\u real\u escape\u字符串添加到管理面板登录参数中。那么我还应该在哪里使用这个mysql\u real\u escape\u字符串呢?我在网站上几乎没有电子邮件表单,我不认为我需要在那里添加 我有一个index.

我遇到了一群黑客的麻烦。他们对我客户的网站进行了几次黑客攻击,我的客户变得更加愤怒:我的客户丢失了有数百条记录的数据库,不得不输入所有:

现在我再做一些介绍

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

我有一个index.php作为主页。我应该为这个页面做些什么来防止通过像index.php这样的url进行sql注入攻击吗

请告诉我!我非常感激!!!:

例如:

我有这样的代码

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\u real\u escape\u字符串就足够了吗。不适用于$this->row_all[$this->tbl_jobs['f4']]

基本上,每次您使用一些不安全的数据用户输入、来自数据库、文件或外部网站的值,即您不能100%确定其在SQL查询中是否安全的任何数据时,您都应该使用。注意,这个函数对于转义动态表名是不安全的,但它远没有基本的用户输入插入常见

我建议你看一下整个网站,也可以浏览网站的其他部分。它是web应用程序安全性的重要信息来源

在我看来,防止SQL注入的首选方法是使用

请记住,如果您选择使用mysql\u real\u escape\u字符串,它只在 在由引号分隔的字符串中使用。永远不要用它在衣服上
任何不带引号的值。这包括数值;相反,请验证用户输入实际上是数字

web开发的黄金法则之一是永远不要!信任用户输入。因此,只要有数据进入数据库,就应该调用mysql\u real\u escape\u string

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


祝您好运,保护您的站点。

防止SQL注入的最佳方法是使用准备好的语句和绑定变量。您使用的是什么版本的MySQL?4.1及更高版本中提供了预先准备好的语句。

与用户输入相关的两件大事是

输入滤波 输出逃逸 输入筛选是在数据存储到数据库之前转换数据的过程。执行mysql_real_escape_string属于此步骤,尽管有更好的方法来清理用户数据以插入db,但此步骤还可以包括清理空白、亵渎过滤、标记转换等

输出转义在将用户内容发送到不允许恶意行为的浏览器时非常小心。这意味着执行htmlentities或其他一些选择性筛选过程


您还可以做其他事情,如资源节流DOS预防、表单令牌CSRF保护等。请转到并开始阅读。

我是一名MSSQL人员,希望这一点适用-为什么网站登录名甚至有删除某些内容的权限?至于丢失数据库,备份在哪里?从id=.mysql\u real\u escape\u string$id的作业中选择*易受sql注入攻击$id=1或sleep50+1到rook。mysql\u real\u escape\u string不是一个魔弹,它只是一个字符串转义函数,只有在引号中使用时才起作用。不仅仅是用户输入本身。任何用作参数的数据都不能永远绝对确定它不包含必须转义的字符。例如,如果出于某种原因,您从数据库中提取数据并在另一个查询中使用此数据,则没有用户交互,但仍然必须转义数据。或者使用事先准备好的陈述。你是对的,我会用你的精确性更新我的答案。谢谢谢谢你的回复。从数据库调用数据怎么样?在这种情况下,我们也应该使用mysql\u real\u escape\u字符串吗?sql中变量的jsut是否转到数据库?