在登录时拨打__construct()
或以这种方式注册课程是否安全:
function __construct(PDO $DBH, $_POST['1'], $_POST['2'])
{
$this->_user=$_POST['1'];
$this->_pass=$_POST['2'];
$this->_DBH=$DBH;
}
我想稍后在这个类中清理用户输入,我不确定我的代码是否适合SQL注入或XSS,因为使用原始POST输入进行了类处理?
答案 0 :(得分:5)
如果您知道清理/使用预准备语句(即原始POST数据未按原样插入查询),则可以这样做。
事实上,如果您使用预准备语句,则根本不需要清理输入(对于SQL,如果您要将数据显示为HTML,则仍需要对其进行清理)。 / p>
答案 1 :(得分:4)
将非消毒数据从一个变量复制到另一个变量不会产生任何影响;这不是SQL注入/ XSS的内容。
当这些变量被使用时,它是关于应用适当的转义(或者更确切地说,避免没有转义)。简单地使用预准备语句可以大大减轻SQL注入的风险;虽然逃避输出以防止XSS仍然是必要的:)
答案 2 :(得分:1)
不解析用户输入绝不是一个好主意。每当用户输入内容时,您应该检查输入。
答案 3 :(得分:1)
我总是htmlentities($value, ENT_QUOTES);
,只是为了安全起见。
使用预准备语句,绝不相信用户输入。
答案 4 :(得分:1)
这不是你应该担心注射攻击的地方。 SQL注入预防通常是消毒输入; XSS预防通常相当于各种形式的输出编码。这些都不一定与数据的内部表示(变量本身的值)有关。
正如其他人所提到的,使用预准备语句(PDO和PDOStatement)将自动执行必要的SQL注入转义。但最终,因为the appropriate transformation varies based on how you're using the data,您通常应该在使用时进行此缓解。