留言板防灌水功能应该怎么做?怎么防止sql注入?用PHP编写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了留言板防灌水功能应该怎么做?怎么防止sql注入?用PHP编写相关的知识,希望对你有一定的参考价值。
大佬留个Q啊,我把文件发过去您给我指点指点,
防灌水:
对无意义帖判定,比如:字数太少,纯数字,无意义的连续数字或字母。
发帖时间间隔和发帖量
系统设置一批关键词匹配,发现有类似的先设为需审核 ,由后台手动操作。
防sql注入
先对提交数据中的危险字符过滤或编码。比如:名称或帖子标题,一定不能是html,直接进行htmlencode ,最后输出到页面上,也不会变成html,而是显示原始字符。对需要使用html的内容部分,过滤script,style等标签,或者直接用strip_tags 函数只保留必要的段落等排版标签。
其次也可以考虑使用bbcode或markdown等对排版有限制的语法转义
数据库操作使用pdo参数编译的模式,可以有效防止提交数据中的注入字符(会变成正常字符插入到数据库中,这也可以防止误判,因为很多IT类的技术帖需要在内容中有这些关键字)
防灌水加重复验证,请求频次验证,留言字符长度限制
防 SQL 注入,对所有输入加转义
<?phpfunction 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注入的方法
怎么修改语句防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)
密码在数据库中应该为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编写的主要内容,如果未能解决你的问题,请参考以下文章