Php 将真正的转义字符串放在同一个值内安全吗?
而不是Php 将真正的转义字符串放在同一个值内安全吗?,php,mysql,mysqli,Php,Mysql,Mysqli,而不是 $_GET['id'] = mysqli_real_escape_string($d,$_GET['id']); 这是安全的还是有可能的,mysqli\u real\u escape\u string()不起作用,这使得$\u GET['id']仍然很危险(SQL注入)?这两种方法都是同等安全的。因为$\u GET/$\u POST/$\u请求参数是在PHP到达文件执行之前设置的 因此,从代码库中看,应该没有任何东西会与$\u GET数组交互。转义取决于数据将在其中使用的上下文。MyS
$_GET['id'] = mysqli_real_escape_string($d,$_GET['id']);
这是安全的还是有可能的,
mysqli\u real\u escape\u string()
不起作用,这使得$\u GET['id']
仍然很危险(SQL注入)?这两种方法都是同等安全的。因为$\u GET/$\u POST/$\u请求参数是在PHP到达文件执行之前设置的
因此,从代码库中看,应该没有任何东西会与$\u GET数组交互。转义取决于数据将在其中使用的上下文。MySQL real escaping对HTML注入、格式错误的CSV值或任何其他需要转义字符的文本格式都不起作用。阅读 当您替换
$\u GET
数据时,这意味着下面的所有代码现在都必须专门处理SQL转义数据。如果您有任何不处理SQL的代码呢?这就是为什么这是一个糟糕的练习
更糟糕的是,您应该简单地使用参数化查询,而不是手动转义。看看你想要实现什么?根本不要逃避。参数化。不要给
$\u GET
赋值。它表示从系统外部传入的数据。操纵它并将其分配回会导致代码混乱。参数化是什么意思?使用准备好的语句,并通过占位符绑定变量<代码>$stmt=$d->prepare(“…”)代码>并通过$stmt->bind_param(…)进行绑定代码>
$id = mysqli_real_escape_string($d,$_GET['id']);