php如何防止sql注入?

php如何防止sql注入?,第1张

额,这是我老师给的答案\x0d\x0a\x0d\x0a答:过滤一些常见的数据库 *** 作关键字,\x0d\x0a select ,insert,update,delete,and,*等或通过系统函数addslashes对内容进行过滤\x0d\x0aphp配置文件中register_globals=off设置为关闭状态.(作用将注册全局变量关闭)如接收POST表单的值使用$_POST['user'],假设设置为ON的话$user才接收值\x0d\x0asql语句书写的时候尽量不要省略小引号(tab上面那个)和单引号\x0d\x0a提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,使之不易被猜中\x0d\x0a对于常的方法加以封装,避免直接暴漏SQL语句\x0d\x0a开启PHP安全模式safe_mode=on\x0d\x0a打开magic_quotes_gpc来防止SQL注入,默认为关闭,开启后自动把用户提交sql查询语句进行转换把"'"转换成"\'"\x0d\x0a控制错误信息输出,关闭错误信息提示,将错误信息写到系统日志\x0d\x0a使用MYSQLI或PDO预处理

//POST过滤安全

$_POST=check_input($_POST)

function check_input($value)

{

if(get_magic_quotes_gpc()){

$value = htmlspecialchars(trim($value))

} else {

$value = addslashes(htmlspecialchars(trim($value)))

}

return $value

}

另一种如下:PHP整站防注入程序,需要在公共文件中require_once本文件

<?PHP

//判断magic_quotes_gpc状态

if (@get_magic_quotes_gpc ()) {

$_GET = sec ( $_GET )

$_POST = sec ( $_POST )

$_COOKIE = sec ( $_COOKIE )

$_FILES = sec ( $_FILES )

}

$_SERVER = sec ( $_SERVER )

function sec(&$array) {

//如果是数组,遍历数组,递归调用

if (is_array ( $array )) {

foreach ( $array as $k =>$v ) {

$array [$k] = sec ( $v )

}

} else if (is_string ( $array )) {

//使用addslashes函数来处理

$array = addslashes ( $array )

} else if (is_numeric ( $array )) {

$array = intval ( $array )

}

return $array

}

//整型过滤函数

function num_check($id) {

if (! $id) {

die ( '参数不能为空!' )

} //是否为空的判断

else if (inject_check ( $id )) {

die ( '非法参数' )

} //注入判断

else if (! is_numetic ( $id )) {

die ( '非法参数' )

}

//数字判断

$id = intval ( $id )

//整型化

return $id

}

//字符过滤函数

function str_check($str) {

if (inject_check ( $str )) {

die ( '非法参数' )

}

//注入判断

$str = htmlspecialchars ( $str )

//转换html

return $str

}

function search_check($str) {

$str = str_replace ( "_", "\_", $str )

//把"_"过滤掉

$str = str_replace ( "%", "\%", $str )

//把"%"过滤掉

$str = htmlspecialchars ( $str )

//转换html

return $str

}

//表单过滤函数

function post_check($str, $min, $max) {

if (isset ( $min ) &&strlen ( $str ) <$min) {

die ( '最少$min字节' )

} else if (isset ( $max ) &&strlen ( $str ) >$max) {

die ( '最多$max字节' )

}

return stripslashes_array ( $str )

}

//防注入函数

function inject_check($sql_str) {

return eregi ( 'select|inert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile', $sql_str )

}

function stripslashes_array(&$array) {

if (is_array ( $array )) {

foreach ( $array as $k =>$v ) {

$array [$k] = stripslashes_array ( $v )

}

} else if (is_string ( $array )) {

$array = stripslashes ( $array )

}

return $array

}

?>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6195623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存