use*_*765 42 php mysql security mysqli code-injection
我已经建立了一个即将上线的网站,并且有一些关于防止SQL注入的问题,我理解如何使用,mysqli_real_escape_string
但我只是想知道我是否必须在我得到的所有变量上使用它SQL语句,当我正在执行select语句时,或者只是在插入更新和删除时,我是否必须使用它?在我将网站上线之前,您还建议我实施其他安全措施,提前感谢您的帮助!
Exp*_*lls 48
无论是读还是写,持久或瞬态,都可以注入任何查询.可以通过结束一个查询并运行单独的查询(可能的mysqli
)来执行注入,这使得预期的查询无关紧要.
来自外部源的查询的任何输入,无论是来自用户还是内部,都应该被视为查询的参数,以及查询上下文中的参数.查询中的任何参数都需要参数化.这导致了一个正确参数化的查询,您可以从参数创建预准备语句并使用参数执行.例如:
SELECT col1 FROM t1 WHERE col2 = ?
Run Code Online (Sandbox Code Playgroud)
?
是参数的占位符.使用mysqli
,您可以使用创建预准备语句,使用prepare
变量(参数)绑定参数bind_param
,然后运行查询execute
.你根本不需要消毒这个论点(事实上这样做是有害的). mysqli
为你这样做.整个过程将是:
$stmt = mysqli->prepare("SELECT col1 FROM t1 WHERE col2 = ?");
$stmt->bind_param("s", $col2_arg);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
参数化查询和预准备语句之间也存在重要区别.这个陈述虽然准备好了,但没有参数化,因此很容易被注入:
$stmt = mysqli->prepare("INSERT INTO t1 VALUES ($_POST[user_input])");
Run Code Online (Sandbox Code Playgroud)
总结一下:
归档时间: |
|
查看次数: |
47268 次 |
最近记录: |