本人新手,在《PHP安全编码》中提到“不要直接使用$_GET”,同时又提到“可以尝试在php.ini中开启magic_quotes_gpc,这样对于所有由用户GET、POST、COOKIE中传入的特殊字符都会转义”,我很纠结,是否开启magic_quotes_gpc就可以直接使用$_GET?如下面例子中的代码本人感觉很不安全,因为没有做验证,但又不知道如何改进,希望大神能帮忙,谢谢。<?php $name = $_GET["name"]; $user = $_GET["user"]; mysql_query("SELECT $name FROM $user");
2 回答
潇湘沐
TA贡献1816条经验 获得超6个赞
1. 像用户名这种有格式的东西,应该取到之后马上用正则表达式验证,比如preg_match('/\A\w{6,14}\z/', $user)
就验证了它是不是6~14位的数字字母下划线。不要使用系统自带的filter,那个管不了什么用。
2. 不要使用mysql
开头的函数,要使用mysqli
,而且最好进行参数化查询而不是addslashes
,后者会有编码问题。
3. 输出html的时候,默认使用htmlspecialchars
,这个函数可以指定编码。或者你可以用现成的模板引擎。
4. 比较字符串的时候,强制使用strcmp
,不要使用双等号。
5. 不要使用$_REQUEST
。
这样可以防掉95%。至于magic_quotes_gpc
,应该早就废了吧。
- 2 回答
- 0 关注
- 1140 浏览
添加回答
举报
0/150
提交
取消