sql注入/ Browser-Hijacker预防php

时间:2010-07-13 11:16:55

标签: php security sql-injection

我有一个网站,我无法使用html_entities()或html_specialchars()来处理用户输入数据。相反,我添加了一个自定义函数,它最终是一个函数,它使用数组$ forbidden来清除所有不需要的字符的输入字符串。目前,由于sql-injection / browser劫持,我将'<','>',“'”视为不需要的字符。我的网站是用utf-8编码的 - 我是否必须为该数组添加更多字符,即在其他字符集中编码的字符'<'?

感谢您的帮助,

Maenny

3 个答案:

答案 0 :(得分:1)

  1. htmlentities和htmlspecialchars函数与sql注入无关
  2. 为了防止注射,你必须遵循一些规则,我已经描述了所有 here
  3. 过滤HTML你可以使用htmlspecialchars()函数,它会伤害你的所有西里尔字符

答案 1 :(得分:0)

你也应该逃避"。它比'更有害,因为您经常在"中包含HTML属性。但是,你为什么不使用htmlspecialchars来做这项工作?

Futhermore:对SQL和HTML使用一个转义函数是不好的。 HTML需要转义标签,而SQL则不需要。因此,如果您使用htmlspecialchars进行HTML输出并使用PDO::quote(或mysql_real_escape_string或您正在使用的任何内容)进行SQL查询,那将是最好的。

但我知道(根据我自己的经验),在SQL查询中转义所有用户输入可能真的很烦人,有时候我根本不会逃避部分,因为我认为它们是“安全的”。但我相信我并不总是正确的。所以,最后我想确保我真的逃避在SQL查询中使用的所有变量,因此编写了一个小类来轻松完成这项工作:http://github.com/nikic/DB也许你想要使用某些东西也是类似的。

答案 2 :(得分:-1)

将此代码放入标题页。它可以防止PHP中的SQL注入攻击。

function clean_header($ string) { $ string = trim($ string);

//来自RFC 822:“字段正文可以由任何ASCII组成 //字符,CR或LF除外。“ if(strpos($ string,“\ n”)!== false){ $ string = substr($ string,0,strpos($ string,“\ n”)); } if(strpos($ string,“\ r”)!== false){ $ string = substr($ string,0,strpos($ string,“\ r”)); }

返回$ string; }