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