防止SQL注入
可能重复:
防止PHP中的SQL注入的最佳方法
我刚刚发现我的网站很可靠。
由于它连接到一个数据库,并具有如下功能:注册,更改密码,通知等...和SUPOSING它是完全脆弱的。
为了开始安全,我应该在代码中寻找什么?
我的意思是,我做了一些研究,到处都是,每个人都说不同的安全问题。
“使用PDO”。
“使用mysql_real_escape_string。”
“使用addslashes。”
我究竟应该寻找什么?
"$_POST" and "$_GET" variables??
"$_SESSION" variables?
SQL查询?
$sql = "select * from user";
$sql = "update user set user="new_user_name";
$sql = "insert into user (user) values ('userid')";
我应该在每种情况下做什么? 请帮助我知道我必须去哪些地方。
谢谢。
以下是安全的PHP应用程序要考虑的要点。
你可以谷歌每个点的更多细节。 希望这可以帮助
你应该寻找什么:从客户端/用户发送的任何数据。 清理/转义这些数据。
PDO可以清理查询(使用PDO :: prepare)并支持多个SQL系统。
对于MySQL,使用MySQLi。 如果您使用MySQL, mysqli_real_escape_string
是用于mysqli_real_escape_string
数据的函数。
您提供的SQL查询都不容易受到SQL注入的影响。
SQL注入漏洞发生是因为SQL输入未正确转义。
例如:
$sql = "select * from users where user_id =" . $_GET['user_id'];
考虑我是否通过了以下内容:
http://some_server.com/some_page.php?user_id=123%20or%201=1
该查询在执行时最终会是:
select * from users where user_id = 123 or 1=1
要解决这个问题,请使用参数化查询:
$query = "select * from users where user_id = ?"
将user_id值绑定到查询时,数据访问层将正确地转义输入字符串,并执行以下操作:
select * from users where user_id = '123 or 1=1' which would not return any rows, preventing the injection
如果使用PHP和MySQL扩展:
$sql = "select * from users where user_id = '" . mysql_real_escape_string($_GET['user_id']) . "'";
请记住,您需要转义进入SQL查询的所有输入:
$sql = "select id_column from some_table where id = 1";
$stmt = mysqli_query($conn, $sql);
if($stmt === false) die(mysqli_error($conn) . "n");
while($row = mysqli_fetch_assoc($conn, $stmt) {
$sql = "update some_other_table set some_value = 'new value' where some_column = '" . mysqli_real_escape_string($conn, $row['id_column']) . "'";
....
}
这是因为您从数据库中选择的值可能包含在SQL语句中不可安全执行的字符,如名称“O'Hara”或示例。 }
链接地址: http://www.djcxy.com/p/16747.html