htmlspecialchar
,mysql_real_escape_string
和str_replace
的使用是否足以防止SQL注入和基于XSS的攻击?
我正在为论坛网站编写软件。所以我想保护我的网站。我不擅长制作PDO语句,并且想要使用上面的库函数。
通过使用htmlspecialchar
单引号和双引号,大于,小于和符号将被编码并防止XSS攻击。我不会将它们解码为原始形式。
然后,mysql_real_escape_string
将阻止SQL注入的第一顺序。
第三,trim
将从两端移除空格。(这可能是可选的)
最后,如果我使用str_replace
将所有通过代码输入的表名和数据库名替换为其他名称会安全吗?
实施例:
假设我有一个数据库名称ABC
和表名XYZ
。
现在有人使用这个陈述:
statement = "SELECT * FROM XYZ WHERE name = '" + userName + "';"
OR
SELECT * FROM XYZ WHERE name = '' OR '1'='1' -- ';
OR
a';DROP TABLE XYZ; SELECT * FROM userinfo WHERE 't' = 't
在这里,如果我使用XYZ
将表名DEF
替换为str_replace
,那么我认为代码无效,因为没有这样的表名。
SQL注入,如
1 OR 1=1, I Will Also str_replace \1\.
我对数据库只有UPDATE
,INSERT
,SELECT
和DELETE
权限,所有这些单词也都是str_replace
。
[请原谅我错误的英语。 ]
答案 0 :(得分:4)
没有。这永远不够。 XSS可以在属性中发生,没有任何<或者>迹象。
此外,您将容易受到标题注入(例如,如果您要发送电子邮件)
并且替换表名是完全错误的。
转发所有数据发送到数据库,并确保当您期望数字而不是字符串时,您传递数字(转换为数字)。
逃避所有输出。但是,如果您在属性中使用动态数据,最好使用HTMLPurifier来清除HTML。
如果您有文件上传,请保护它们。确保用户无法上载可执行文件,并且无法覆盖文件。不要相信$ _FILES ['name']属性
如果您要发送电子邮件,请注意标题注入。
最重要的是,只需使用经过验证的框架即可。它可以为您提供PDO功能并逃脱。