-1

htmlspecialchar的使用是否足以防止 SQL 注入和基于 XSS 的攻击mysql_real_escape_stringstr_replace

我正在为论坛网站编写软件。因此,我想保护我的网站。我不擅长做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

在这里,如果我将表名替换XYZDEF使用,str_replace那么我认为代码将不起作用,因为没有这样的表名。

SQL注入如

1 OR 1=1, I Will Also str_replace \1\.

我将只有UPDATE, INSERT,SELECTDELETE数据库权限,所有这些词也str_replace将由我负责。

[请原谅我的英语错误。]

4

1 回答 1

4

不,这永远不够。XSS 可以发生在属性中,没有任何 < 或 > 符号。

此外,您将容易受到标头注入的攻击(例如,如果您发送电子邮件)

并且替换表名是完全错误的。

转义所有发送到数据库的数据,并确保当您期望数字而不是字符串时,您正在传递数字(强制转换为数字)。

转义所有输出。但是如果你在属性中使用动态数据,最好使用 HTMLPurifier 来清除你的 HTML。

如果您有文件上传,请保护它们。确保用户不能上传可执行文件并且不能覆盖文件。不要相信 $_FILES['name'] 属性

如果您要发送电子邮件,请注意标头注入。

最重要的是,只需使用经过验证的框架。它可以为您提供 PDO 功能和转义。

于 2013-06-28T07:23:15.587 回答