留言板防灌水功能应该怎么做?怎么防止sql注入?用PHP编写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了留言板防灌水功能应该怎么做?怎么防止sql注入?用PHP编写相关的知识,希望对你有一定的参考价值。

大佬留个Q啊,我把文件发过去您给我指点指点,

防灌水:

    对无意义帖判定,比如:字数太少,纯数字,无意义的连续数字或字母。

    发帖时间间隔和发帖量

    系统设置一批关键词匹配,发现有类似的先设为需审核 ,由后台手动操作。

防sql注入

    先对提交数据中的危险字符过滤或编码。比如:名称或帖子标题,一定不能是html,直接进行htmlencode ,最后输出到页面上,也不会变成html,而是显示原始字符。对需要使用html的内容部分,过滤script,style等标签,或者直接用strip_tags 函数只保留必要的段落等排版标签。

    其次也可以考虑使用bbcode或markdown等对排版有限制的语法转义

    数据库操作使用pdo参数编译的模式,可以有效防止提交数据中的注入字符(会变成正常字符插入到数据库中,这也可以防止误判,因为很多IT类的技术帖需要在内容中有这些关键字)

参考技术A

防灌水加重复验证,请求频次验证,留言字符长度限制

防 SQL 注入,对所有输入加转义

<?php     
    function post_check($post)    
        
    if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开    
        
    $post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤    
        
    $post = str_replace("_", "\\_", $post); // 把 '_'过滤掉    
    $post = str_replace("%", "\\%", $post); // 把' % '过滤掉    
    $post = nl2br($post); // 回车转换    
    $post= htmlspecialchars($post); // html标记转换       
    return $post;    
        
    ?>

引自 PHP中防止SQL注入的方法

参考技术B 主要是转义里面的值,mysql_real_escape_string 参考技术C 防灌水这个要看你怎么理解灌水这个定义了,sql注入的话其实来回也是那几种方法特殊字符的转义,相关安全函数的开启什么的

怎么修改语句防sql注入攻击,我想把密码换成列表的形式,怎么操作?

原本的语句是这样的:
sql = "SELECT * FROM account WHERE email ='" + data_info["account_email"] + "'and password ='" + data_info["account_password"] + "'and type ='" + data_info["account_type"] + "';"
cursor.execute(sql)

用户名规则定为只能英文、数字,不支持特殊符号;用sql检查前先过滤用户名中的特殊字符。
密码在数据库中应该为md5形式,注册的时候就将明文密码md5后存储在库中。
在sql验证前先将输入的密码用md5函数转换一下,这样出来的md5串都是合法字符不会干扰sql语句。数据库用md5形式存密码也防止密码泄露。
搜搜 密码+盐 md5

不要相信任何能提交的东西,全要过滤一遍。所有过滤、校验都在后台,靠前台js是拦不住curl伪造的。
参考技术A sql拼接是最容易攻击的
最好换成参数式查询
参考技术B



一般,SQL 注入是 SQL语句直接是从页面获得值进行拼接的。

如果

string strUserid = "admin"; //从页面获得输入内容
string strSql = "select 1 from users where userid='" + strUserid + "' ";

若 strUserid 正常输入,是没问题的。

select 1 from users where userid='admin'

但,SQL注入时候会这样写

string strUserid = "' or 1=1 --";

这时,SQL为

select 1 from users where userid='' or 1=1 --'

这样永远返回验证通过的结果。





参考技术C 使用ORM, 试试sqlalchemy追答

使用ORM, 试试sqlalchemy

以上是关于留言板防灌水功能应该怎么做?怎么防止sql注入?用PHP编写的主要内容,如果未能解决你的问题,请参考以下文章

PHP怎么防止sql注入

php如何防止sql注入

网站SQL被注入,怎么防?

求ASP防注入的办法

php防sql注入

web前端怎么防止代码注入攻击