Php MySQL注入预防不起作用?
我想用mysql\u real\u escape\u字符串阻止1=1,但不确定我是否做得对,因为我仍然可以执行1=1。这是我的代码:Php MySQL注入预防不起作用?,php,mysql,security,Php,Mysql,Security,我想用mysql\u real\u escape\u字符串阻止1=1,但不确定我是否做得对,因为我仍然可以执行1=1。这是我的代码: $memberId = mysql_real_escape_string($_GET["memberId"]); $sql = "SELECT firstName, lastName, dateSent, message, messageId FROM member, message WHERE member.memberId = message.sentFrom
$memberId = mysql_real_escape_string($_GET["memberId"]);
$sql = "SELECT firstName, lastName, dateSent, message, messageId FROM member, message WHERE member.memberId = message.sentFromId AND message.inboxId=" . $memberId . " ORDER BY dateSent DESC;";
感谢mysql\u real\u escape\uStrong>STRING()用于字符串,而不是整数。
1=1
中没有需要转义的内容,因此m_r_e_s()将原封不动地将其传回
如果要处理整数,请使用整数工具:
$memberID = intval($_GET['memberId']);
不进行SQL注入的唯一正确方法是使用。 如果尝试使用转义进行缓解,则将失败。 如果您通常从不连接查询,总是使用预先准备好的语句,那么您就有机会了。
它还具有使代码更具可读性的优点。
而且没有缺点。+1我同意MK。但是(只是分享一下)我对
准备好的声明的立场是PDO
,而不是mysqli
:)Re无缺陷”:如何使用准备好的语句创建多行插入(又称扩展插入)?这不是真的。如果将所有数据视为字符串作为一条规则,则除了LIMIT子句参数外,永远不会失败。而且事先准备好的声明也不是万能的。这对我没有帮助identifiers@Mchl看来你是对的。其他实现(例如JDBC)有批处理语句的概念,但没有PHP,显然。@Col.shrapanel我完全不明白你刚才说的话。我已经在