防止SQL注入的四种方法

嘿嘿,你说这个防止SQL注入的方法很重要。
上次为此制定了计划,几乎所有数据都丢失了。
对于那些因我自己或他人的错误而感到困惑的人,我们将为您提供以下方法:
1 查询参数化:这是一个确定的核心问题。
去年他在上海做一个电商项目,数据库完全瘫痪,因为前端直接用SQL表达用户的输入。
后来,我要求提供搜索参数,例如使用 ?占位符,或使用 : 名称,如 MySQL。
数据库很混乱,不认为用户输入了类似“OR 1 =1 ”的内容。
你看不同的数据库系统有不同的写法,但是原理是一样的——用户输入应该和SQL语句分开。
当我不这样做时,我会看着监控摄像头而感到害怕。

2 输入验证:这个方法还是蛮有趣的。
以前是一个客户端,用户一不小心就进去了,有人直接输入 [xss_clean]vigil(1 [xss_clean] ,然后整个页面就乱了。
后来我给他们加了一个正则表达式,只有字母、数字和智人,现在稳定了。
不过这个东西的规则需要经常更新,比如表单和密码地址,不能一成不变。
我是一个打工资的朋友,差点赔了钱。
3 .这个方法听起来挺先进的,我之前已经包含了所有的添加、修改和投诉。
但是它是一个陷阱,直接进入存储代码我忘记了更改它,但使用“OR 1 ”却犯了一个大错误,但如果不这样做,问题仍然会发生,这让具有读写权限的帐户变得很麻烦。
总而言之,您可以阻止大多数这些验证以隔离外部帐户,并且必须经常更新安全性。
必须管理,必须使用工具扫描漏洞,我还在思考如何让这个新系统更安全……

利用 Prepared Statement 提升Mysql性能

有两个关键点:预编译和缓存。

预编译是指SQL语句编译一次,然后直接带参数执行。
不必每次都重新编译,节省CPU。

缓存用于存储编译好的SQL语句,下次直接使用。
无需重新编译和传输。

举个例子:我上周刚做一个高并发的项目。
普通SQL每次都要重新编译,直接烧毁CPU。
切换到预编译后,CPU 下降了一半。

网络传输也省了。
普通SQL每次都需要传递完整的SQL,而预编译只传递参数。
传递时不需要将数字转换为字符串,非常高效。

注射预防是标准的。
参数绑定后,就消除了合并SQL字符串的风险。
之前有一个项目,因为插入了拼接SQL导致整条线宕机。

批量操作更好玩。
添加批处理同时传递多组参数,MySQL会直接批量处理,省去往返传输。

但注意:不能使用动态SQL,表/列名发生变化时必须合并。
缓存可以被踢掉,频繁使用的SQL必须保持连接。

你自己看看这个东西用在哪里,效果更明显。