bbt*_*ang 53 php code-injection
我有点困惑,PHP中有这么多功能,有些使用这个,有些使用它.有些人使用:htmlspecialchars(),htmlentities(),strip_tags()等
哪个是正确的,你们通常使用什么?
这是正确的(建议我更好一个,如果有的话):
$var = mysql_real_escape_string(htmlentities($_POST['username']));
Run Code Online (Sandbox Code Playgroud)
这行可以防止MySQL注入和XSS攻击??
顺便问一下,除了XSS攻击和MySQL注入之外还有其他我需要关注的事情吗?
编辑
总结:
如果我想将字符串插入数据库,我不需要使用htmlentities,只需使用mysql_real_escape_string.显示数据时,使用htmlentities(),是你的意思吗?
总结:
mysql_real_escape_string 插入数据库时使用htmlentities() 在将数据输出到网页时使用htmlspecialchars() 用的时候?strip_tags() 用的时候?addslashes() 用的时候?有人可以填写问号吗?
ste*_*efs 64
mysql_real_escape_string插入数据库时使用htmlentities()在将数据输出到网页时使用htmlspecialchars()用的时候?strip_tags()用的时候?addslashes()用的时候?
htmlspecialchars大致相同htmlentities.区别:字符编码.
像两个编码控制字符<,>,&等等用于打开标签等htmlentities也编码从像元音变音,欧元符号和的其他文字字符.如果您的网站是UTF,请使用htmlspecialchars(),否则请使用htmlentities().
htmlspecialchars/ entities编码特殊字符,因此它们被显示但不被解释.strip_tags删除它们.
在实践中,这取决于您需要做什么.
例如:您编写了一个论坛,并为用户提供了一个文本字段,以便他们发布内容.恶意的只是尝试:
pictures of <a href="javascript:void(window.setInterval(function () {window.open('http://evil.com');}, 1000));">kittens</a> here
Run Code Online (Sandbox Code Playgroud)
如果您不执行任何操作,将显示该链接,并且点击该链接的受害者会获得大量弹出窗口.
如果您输出htmlentity/htmlspecialchar,则文本将按原样存在.如果你strip_tag它,它只是删除标签并显示它:
pictures of kittens here
Run Code Online (Sandbox Code Playgroud)
有时你可能想要混合物,在那里留下一些标签,比如<b>(strip_tags可以在那里留下某些标签).这也是不安全的,所以最好使用一些完整的库来对抗XSS.
引用旧版本的PHP手册:
在需要在数据库查询等中引用的字符之前返回带有反斜杠的字符串.这些字符是单引号('),双引号("),反斜杠()和NUL(NULL字节).
使用addslashes()的一个示例是在将数据输入数据库时.例如,要将名称O'reilly插入数据库,您需要将其转义.强烈建议使用DBMS特定的转义函数(例如MySQL的mysqli_real_escape_string()或PostgreSQL的pg_escape_string()),但如果您使用的DBMS没有转义函数且DBMS使用\来转义特殊字符,那么可以使用这个功能.
在目前的版本是不同的措词.
Ove*_*der 10
我想到了这个快速清单:
htmlspecialchars()PHP代码的任何输出,即包含用户输入.大多数模板引擎可以帮助您轻松完成.php.ini以防止脚本访问您的cookiePHPSESSID在cookie之外暴露用户(会话ID),如果有人知道其他人的会话ID,他们可以简单地使用它来登录他们的帐户Remember me功能要非常小心,可能会显示一点警告.PDO默认情况下会忽略该错误,并在日志中记录警告.这会导致从数据库获取的变量为空,具体取决于您的代码,这可能会导致安全问题.PDO 模拟预处理语句一样.把它关掉.UTF-8在数据库中使用编码,它允许您存储几乎任何字符并避免与编码相关的攻击$myquery = "INSERT INTO mydb.mytable (title) VALUES(" . $user_input . ")"事情意味着你有一个SQL注入的巨大安全风险..php文件扩展名的文件,那么只要您的代码加载该文件,它就会执行它,并使用户能够执行一些后端代码只对数据进入需要编码的系统进行编码 - 否则您将遇到想要操纵实际数据的情况.
对于SQL注入 - 使用如何在PHP中阻止SQL注入中描述的绑定变量?(它谈论准备好的陈述,但它是给你保护的绑定,而不是准备).
对于XSS - 如果您在指定HTML或文本的位置写入HTML.在生成文档的位置使用htmlentities.我会避免以这种形式将数据存储在数据库中(除了可能在写入稀疏读取的系统中,CPU性能/磁盘访问时间正在变成并发出 - 然后我会有一个raw_和html_版本的列...或者只使用memcached或类似的东西).
如果您要让用户输入URL,那么您需要更加小心,因为javascript:do_evil()它将执行有效的URI(例如,作为点击链接的href或(在某些浏览器中)刚刚加载的图像的src).